【发布时间】:2019-10-04 14:34:10
【问题描述】:
我正在尝试编写一个 sql 查询,该查询将返回按周开始的所有产品的计数。日期是每周一。因此,每一行都将返回该周的星期一以及该周开始的单位总数。运行报告的当前季度中的每一周需要的总周数。我有这个代码,但是当那周没有创建单位时,数据就会丢失。我需要在没有单位开始的周返回 0,而不是它不存在。我在网上找到了一些资源,但他们大多使用我的 SSMS 似乎没有的“generate_series”命令。
示例数据:tableA
Product--------DateStarted-----
1 2019-10-2
1 2019-10-4
1 2019-10-3
1 2019-10-23
1 2019-11-08
1 2019-11-09
-
期望的结果:
Week----------Product Count
2019-09-30 3
2019-10-07 0
2019-10-14 0
2019-10-21 1
.....Continued 0s for each week with the date being monday
2019-11-04 2
...continued to end of quarter
2019-12-30 0
-
当前结果:
Week------------ProductCount-----
2019-09-30 3
2019-10-21 1
2019-11-04 2
-
当前的 SQL 代码
SELECT Count([week]) as 'TotalStarted', [week] FROM
(SELECT
DATEADD(DAY, 2 -DATEPART(WEEKDAY, Crated), CAST(DateStarted as date)) as 'Week'
FROM tableA
WHERE Product like ('1')
AND [DateStarted] >= DATEADD(qq, DATEDIFF(qq, 0, GETDATE()), 0) AND
[DateStarted] <= DATEADD(dd, -1, DATEADD(qq, DATEDIFF(qq, 0, GETDATE()) +1, 0))) tbla
Group by [Week]
【问题讨论】:
-
您需要创建一个包含您感兴趣的所有星期的表变量(或临时表或永久表)。到处都有很多示例说明如何这样做(手动,递归 CTE,while 循环)。创建包含每个星期一的表后,您只需从该表开始,然后将查询作为子查询加入。左连接将显示“缺失”周。
-
@avery_larry 很抱歉回复太长,参加会议。我将尝试制作一个独立的表并对其进行连接。我会发布我的结果。
标签: sql-server date casting count