Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL计数案例,其中我有一个唯一字段_Sql_Count_Case - Fatal编程技术网

SQL计数案例,其中我有一个唯一字段

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 所以对于周二,如果我计算

我们一直在使用下面的代码计算所有商店每天发生的事件数。只是简单地计算网站的浏览日期

因此,一个存储可能有两个或多个事件

现在我每天都需要独特的商店事件。不断地被难住,所以寻求帮助

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
所以对于周二,如果我计算日期,我会选择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)  ;