sql-server - 有没有办法填补没有 ReviewType 出现日期占位符和 0 次出现的日期空白
问题描述
有没有办法填补没有 ReviewType 出现日期占位符和 0 次出现的日期空白?
SELECT
dateCompleted,
Count(CASE ReviewType WHEN 1 THEN ReviewType END) AS NonPeak,
Count(CASE ReviewType WHEN 2 THEN ReviewType END) AS AM,
Count(CASE ReviewType WHEN 3 THEN ReviewType END) AS PM
FROM ALAN.dbo.qryPeakReviews
WHERE ElementID Like '%SI%'
AND dateCompleted >= DATEADD(day, -Convert(Int, '900'), getdate())
GROUP BY dateCompleted
所需的输出(带有生成的行)是
dateCompleted NonPeak AM PM
6/5/2018 1 0 0
-- added
6/6/2018 0 0 0
6/7/2018 0 0 0
6/8/2018 0 0 0
6/9/2018 0 0 0
6/10/2018 0 0 0
-- generated
6/21/2018 2 0 0
8/27/2018 0 0 1
8/28/2018 0 1 0
解决方案
使用数字表格,您可以创建日期来填写表格中缺少的日期。在下面的查询中,我使用了 master.dbo.spt_values(限制为 2048)。但是,这是一个大部分未记录的表格,主要由 Microsoft 使用。最好创建自己的数字表,而不是依赖这个(参见这篇文章)。我在这里使用它只是为了传达如何使用这样的表格。
DECLARE @dtStart DATE
SET @dtStart = dateadd(day, -7, getdate())
SELECT
tblA.dateCompleted,
Count(CASE ReviewType WHEN 1 THEN ReviewType END) AS NonPeak,
Count(CASE ReviewType WHEN 2 THEN ReviewType END) AS AM,
Count(CASE ReviewType WHEN 3 THEN ReviewType END) AS PM
FROM (
SELECT dateadd(day, number, @dtStart) as [dateCompleted]
FROM (
SELECT number
FROM master.dbo.spt_values
WHERE [type] = 'P'
) tbl
WHERE dateadd(day, number, @dtStart) >= @dtStart
) tblA
LEFT JOIN ALAN.dbo.qryPeakReviews tblB ON tblA.dateCompleted = tblB.dateCompleted
and tblB.elementID Like '%SI%'
WHERE tblA.dateCompleted >= DATEADD(day, -7, getdate())
AND tblA.dateCompleted < GETDATE()
GROUP BY tblA.dateCompleted
使用以下测试数据(注意缺少 1/4 和 1/6)...
create table #test (dateCompleted date, ReviewType int, elementID varchar(10))
insert into #test
values ('2020-01-01', 1, 'SI')
insert into #test
values ('2020-01-02', 2, 'SI')
insert into #test
values ('2020-01-03', 3, 'SI')
insert into #test
values ('2020-01-05', 1, 'SI')
insert into #test
values ('2020-01-07', 1, 'SI')
产生以下输出(注意 1/4 和 1/6 包含在 0 值中)...
您可以在此处阅读有关 master.dbo.spt_values 表的更多信息
推荐阅读
- svg - 在 svg 中创建内部阴影
- python - 在 mqtt paho 回调函数中运行 self 对象问题
- javascript - 我如何解决javascript中异步函数的问题?
- python - 如果不满足合同,不使用 isinstance,打字时是否可能出现运行时错误?
- python - 当它们返回 null/none 时,我如何为抓取的结果设置默认值
- wordpress - Wordpress:如何编辑喷气背包表格
- jquery - jQuery 的按钮功能停止使用 Bootstrap 5
- ubuntu - 为什么在Ubuntu中使用Nginx后一个域显示另一个域的html页面?
- zpl - 128码格式的条码长度如何标注?
- javascript - JSDoc 一个方法调用,因此它指向被注入的函数