2017-10-21 59 views
0

Voici une requête T-SQL:colonnes créées par la déclaration de cas ne pas regrouper par

SELECT 
    A.DateStamp, 
    CASE WHEN A.T = 10 THEN A.counts END AS HT, 
    CASE WHEN A.T = 98 THEN A.counts END AS BP, 
    CASE WHEN A.T = 94 THEN A.counts END AS MP, 
    CASE WHEN A.T = 12 THEN A.counts END AS SP 
FROM 
    A       
WHERE 
    (A.date_time BETWEEN GETDATE() - 60 AND GETDATE() - 30) -- say 
--GROUP BY A.DateStamp,A.T,A.counts 
ORDER BY 
    CONVERT(DATE, A.DateStamp) ASC 

Il fonctionne bien. Auparavant, j'utilisais plusieurs copies de la table A et toutes les personnes jointes. ici les résultats sont corrects, mais divisé en plusieurs lignes comme:

date  | BP | MP | SP | HT | 
-----------+----+----+----+----+ 
22/10/2017 12 34 56 78 
Looks Like -- -- -- -- 
22/10/2017 12 -- -- -- 
22/10/2017 -- 34 -- -- 
22/10/2017 -- -- 56 -- 
22/10/2017 -- -- -- 78 

Répondre

2

Vous devez utiliser agrégation conditionnelle pour cela et GROUP BY tout le champ DateStamp:

SELECT A.DateStamp, 
     SUM(CASE WHEN A.T=10 THEN A.counts ELSE 0 END) AS HT, 
     SUM(CASE WHEN A.T=98 THEN A.counts ELSE 0 END) AS BP, 
     SUM(CASE WHEN A.T=94 THEN A.counts ELSE 0 END) AS MP, 
     SUM(CASE WHEN A.T=12 THEN A.counts ELSE 0 END) AS SP 
FROM A       
WHERE (A.date_time BETWEEN getdate()-60 AND getdate()-30) 
GROUP BY A.DateStamp 
ORDER BY convert(date,A.DateStamp) ASC 
1

Je suppose que vous devez regrouper par date seulement

SELECT convert(date,A.DateStamp) AS Date, 
     SUM(CASE WHEN A.T=10 THEN A.counts END) AS HT , 
     SUM(CASE WHEN A.T=98 THEN A.counts END) AS BP, 
     SUM(CASE WHEN A.T=94 THEN A.counts END) AS MP, 
     SUM(CASE WHEN A.T=12 THEN A.counts END) AS SP 
FROM A       
WHERE A.date_time BETWEEN getdate()-60 AND getdate()-30 
GROUP BY convert(date,A.DateStamp) 
ORDER BY convert(date,A.DateStamp) ASC