2017-10-21 52 views
0

下面是一个T-SQL查询:列不按

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 

它运作良好。以前我使用表A的多个副本并全部加入。在这里结果是正确的,但分裂像多行:

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 

回答

2

您需要使用此有条件聚集GROUP BY只是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

我猜你的需要组仅限日期

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