sql-server - 在没有返回数据的情况下,每周的星期一投 0 计数,SQL
问题描述
我正在尝试编写一个 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]
解决方案
使用有
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]
HAVING Count([week])>0
对不起,我真的看错了。尝试这样的事情。事实上,这是 avery_larry 的回答
如果认为你必须调整一周中的代表日
;WITH [0 to 12] (v) as
(
SELECT V
FROM (
VALUES (0), (1), (2), (3), (4), (5) ,(6), (7), (8), (9), (11), (12)
)T(V)
),
[date_in_qq] (week) as (
SELECT DATEADD(day,DATEDIFF(day,0,DATEADD(qq, DATEDIFF(qq, 0, GETDATE()),0)),v*7)
FROM [0 to 12]
)
SELECT Count(tbla.[week]) as 'TotalStarted', [date_in_qq].[week] FROM
[date_in_qq]
LEFT OUTER JOIN
(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 ON tbla.[week] = [date_in_qq].[week]
Group by [date_in_qq].[Week]
推荐阅读
- javascript - 如何在每个请求的标头中设置令牌?
- mamp - MAMP 安装程序现在将退出,现有地图安装将不会被删除
- machine-learning - 对强化学习 MDP 的 Q(s,a) 公式的理解感到困惑?
- java - JPA:2 个应用程序需要更新一个对象
- html - 为什么我在网页上看到 2 个幻灯片?
- reactjs - 图像导入的 Node Express SSR 上的“无效或意外令牌”
- eclipse - 无法运行 kotlin 项目
- swift - 是否可以使用设备数据中的替代应用程序图标?
- python - 创建后如何使用 python 移动 tkinter 窗口?
- javascript - Javascript API 语法帮助 - const { uport, MNID }