sql - SQL Count 案例,我有一个唯一字段
问题描述
一直在使用下面的代码来计算所有商店每天发生的次数。只是简单地计算 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,
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)
:
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) ;
我注意到您正在使用DATEDIFF()
一周中的某一天。 DATENAME()
或者DATEPART()
看起来更透明(尽管它们受全局设置的影响)。
推荐阅读
- asp.net - 这个 NHibernate 5 查询不支持什么?
- javascript - 如何修复丢失的脚本:服务?
- c# - “链接表管理器”功能以编程方式使用 c#
- laravel - 如何在 Laravel 验证中添加错误消息?
- swift - 如何获取放置在表格视图单元格上的标签的值
- java - 在java中使用aws sdk版本2的合理好方法,请求apigateway
- python - 我正在尝试为 SQL 加载 python 扩展,但是当我尝试时我得到了这个
- mysql - 如何从mysql中的表中跳过行
- c++ - C++ 模板 - 在类外实现
- tensorflow - 使用 TPUClusterResolver 时为 TPU 转储 HLO IR