如何解决SQL Count case,我有一个唯一的字段
一直在使用下面的代码来计算所有商店每天发生的次数。只是简单地计算 Site_Review_Date。
所以 1 家商店可能有 2 次或更多次出现
现在我每天都需要独特的商店事件。不断被难住,所以请寻求帮助。
数据示例
Store Site_Review_Date
90 2021-03-02
90 2021-03-02
1 2021-03-02
3 2021-03-02
20 2021-03-02
87 2021-03-02
所以对于星期二,如果我计算日期,我会寻找 5 而不是 6
Declare @reportStartDate date
set @reportStartDate ='2021-1-03'
SELECT
DATEPART(wk,@reportStartDate ) as Week,COUNT(CASE WHEN DATEDIFF(dd,@reportStartDate,Site_Review_Date) = 0 THEN 1 END) AS S,Site_Review_Date) = 1 THEN 1 END) AS M,Site_Review_Date) = 2 THEN 1 END) AS T,Site_Review_Date) = 3 THEN 1 END) AS W,Site_Review_Date) = 4 THEN 1 END) AS R,Site_Review_Date) = 5 THEN 1 END) AS F,Site_Review_Date) = 6 THEN 1 END) AS Sat,COUNT(*) AS TOTAL
FROM dbo.Map_Survey_Tracking
WHERE Site_Review_Date BETWEEN @reportStartDate/*Sunday,report start date*/ AND DATEADD(dd,7,@reportStartDate)
结果
Week S M T W R F Sat TOTAL
2 0 4 5 5 10 9 6 42
解决方法
我想你想要count(distinct)
:
SELECT DATEPART(wk,@reportStartDate ) as Week,COUNT(DISTINCT CASE WHEN DATEDIFF(dd,@reportStartDate,Site_Review_Date) = 0 THEN Store END) AS S,Site_Review_Date) = 1 THEN Store END) AS M,Site_Review_Date) = 2 THEN Store END) AS T,Site_Review_Date) = 3 THEN Store END) AS W,Site_Review_Date) = 4 THEN Store END) AS R,Site_Review_Date) = 5 THEN Store END) AS F,Site_Review_Date) = 6 THEN Store END) AS Sat,COUNT(*) AS TOTAL
FROM dbo.Map_Survey_Tracking
WHERE Site_Review_Date BETWEEN @reportStartDate/*Sunday,report start date*/ AND DATEADD(dd,7,@reportStartDate) ;
我注意到您使用 DATEDIFF()
表示星期几。 DATENAME()
或 DATEPART()
似乎更透明(尽管它们受全局设置的影响)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。