SQL计数案例,其中我有一个唯一字段
我们一直在使用下面的代码计算所有商店每天发生的事件数。只是简单地计算网站的浏览日期 因此,一个存储可能有两个或多个事件 现在我每天都需要独特的商店事件。不断地被难住,所以寻求帮助 Datae示例SQL计数案例,其中我有一个唯一字段,sql,count,case,Sql,Count,Case,我们一直在使用下面的代码计算所有商店每天发生的事件数。只是简单地计算网站的浏览日期 因此,一个存储可能有两个或多个事件 现在我每天都需要独特的商店事件。不断地被难住,所以寻求帮助 Datae示例 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 所以对于周二,如果我计算
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,
COUNT(CASE WHEN DATEDIFF(dd, @reportStartDate, Site_Review_Date) = 1 THEN 1 END) AS M,
COUNT(CASE WHEN DATEDIFF(dd, @reportStartDate,Site_Review_Date) = 2 THEN 1 END) AS T,
COUNT(CASE WHEN DATEDIFF(dd, @reportStartDate, Site_Review_Date) = 3 THEN 1 END) AS W,
COUNT(CASE WHEN DATEDIFF(dd, @reportStartDate, Site_Review_Date) = 4 THEN 1 END) AS R,
COUNT(CASE WHEN DATEDIFF(dd, @reportStartDate, Site_Review_Date) = 5 THEN 1 END) AS F,
COUNT(CASE WHEN DATEDIFF(dd, @reportStartDate, 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)
:
我注意到您正在使用
DATEDIFF()
作为一周中的一天DATENAME()
或DATEPART()
看起来更透明(尽管它们受全局设置的影响)。如果两个事件发生在同一天,我的唯一字段是store,我只想数1。@Michael。啊。这是有道理的。我更新了答案。count返回字段的非空行数。代码应使用Sum not count
SELECT DATEPART(wk,@reportStartDate ) as Week,
COUNT(DISTINCT CASE WHEN DATEDIFF(dd, @reportStartDate, Site_Review_Date) = 0 THEN Store END) AS S,
COUNT(DISTINCT CASE WHEN DATEDIFF(dd, @reportStartDate, Site_Review_Date) = 1 THEN Store END) AS M,
COUNT(DISTINCT CASE WHEN DATEDIFF(dd, @reportStartDate,Site_Review_Date) = 2 THEN Store END) AS T,
COUNT(DISTINCT CASE WHEN DATEDIFF(dd, @reportStartDate, Site_Review_Date) = 3 THEN Store END) AS W,
COUNT(DISTINCT CASE WHEN DATEDIFF(dd, @reportStartDate, Site_Review_Date) = 4 THEN Store END) AS R,
COUNT(DISTINCT CASE WHEN DATEDIFF(dd, @reportStartDate, Site_Review_Date) = 5 THEN Store END) AS F,
COUNT(DISTINCT CASE WHEN DATEDIFF(dd, @reportStartDate, 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) ;