Columns created by case statement do not group by

依然范特西╮ 提交于 2019-12-11 15:59:22

问题


Here is a T-SQL query:

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

It works well. Previously I was using multiple copies of table A and all joined. over here results are correct but split in multiple rows like:

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

回答1:


You need to use conditional aggregation for this and GROUP BY just the DateStamp field:

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



回答2:


i guess you need to group by date only

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


来源:https://stackoverflow.com/questions/46860280/columns-created-by-case-statement-do-not-group-by

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!