gpt4 book ai didi

sql - 添加缺失日期以查询

转载 作者:行者123 更新时间:2023-12-04 20:56:13 25 4
gpt4 key购买 nike

我一直在研究一个查询,它根据员工的工作小时数返回日期。如果某个日期没有工作小时数,则也不会为员工创建该日期。例如:

SELECT TOP 1000 SUM(AantalUur) as Uren, GewerktopDatum as Datum
FROM db gu
JOIN Medewerkers m on m.medewerker_pk = gu.medewerker_fk
Where m.Voornaam = 'name'
and COALESCE(m.Tussenvoegsel,'') LIKE 'name'
and m.Achternaam = 'name'
and GewerktOpDatum between '2017-05-16 00:00:00.0' and '2017-05-23 00:00:00.0'
and UrenPerWeek > 0
GROUP BY GewerktOpDatum

返回值是:

8       2017-05-16 00:00:00.000
8 2017-05-17 00:00:00.000
8 2017-05-18 00:00:00.000
6 2017-05-19 00:00:00.000
8 2017-05-22 00:00:00.000
6,5 2017-05-23 00:00:00.000

所以基本上,我还希望返回 2017-05-20 和 2017-05-21,即使它们不在数据库中。

我该怎么做?

最佳答案

根据@TimBiegeleisen 的建议,您可以通过Recursive CTE 使用日历表。

DECLARE @StartDate date  = dateadd(month, -3, getdate()) -- or other day that you want....
DECLARE @EndDate date = getdate()

;WITH temp AS
(
SELECT @StartDate AS DateValue
UNION ALL
SELECT dateadd(day,1,t.DateValue)
FROM temp t
WHERE t.DateValue <= @EndDate
)
SELECT t.DateValue, ISNULL(d.Uren ,0) AS Uren
FROM temp t
LEFT JOIN
(
SELECT TOP 1000 SUM(AantalUur) as Uren, GewerktopDatum as Datum
FROM db gu
JOIN Medewerkers m on m.medewerker_pk = gu.medewerker_fk
Where m.Voornaam = 'name'
and COALESCE(m.Tussenvoegsel,'') LIKE 'name'
and m.Achternaam = 'name'
and GewerktOpDatum between '2017-05-16 00:00:00.0' and '2017-05-23 00:00:00.0'
and UrenPerWeek > 0
GROUP BY GewerktOpDatum

) d ON t.DateValue = d.Datum

关于sql - 添加缺失日期以查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44152004/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com