2016-01-29 59 views
0

我有一个表有这个数据 当天员工reported和那一周的start date(星期一)这一周的日期。 现在,他们没有工作的所有日期,例如圣诞节周没有数据。 有没有一种方法可以补充缺失的星期。因此,我仍然有每周和每周的星期开始日期。但报告日期可以为空。sql获取每周的两个日期之间的开始日期

我无法声明变量。

enter image description here

+1

到这里看看:http://stackoverflow.com/questions/9180308/ssrs-default-parameter-values-in-subscription/9180701#9180701 – JonH

+0

@JonH我想环节都有无关这个问题。 –

+1

@haytem - 你一定没有读过它......标量值函数允许他打电话来获取任何日期的weekstart_date。它非常相关。实际上,他可以简单地调用'SELECT * FROM [MyDB]。[dbo]。[udfCommonDates](GetDate())'或者执行'SELECT get_week_start FROM [MyDB]。[dbo]。[udfCommonDates](GetDate() )'并加载或加入此表。 – JonH

回答

1

与您的数据,可能是最简单的方法是这样的:

select distinct weekstart_date 
from t 
union 
select distinct dateadd(day, 7, weekstart_date) 
from t; 

你再也不会丢失一个多星期,所以只是每个星期结合了下周似乎足够了。

+0

与工会有区别吗?这是否使它更加独特? – JamieD77

+0

@ JamieD77 - 需要联合来提取查询的其余部分。没有它,这是行不通的。 – JonH

+0

@这是真的JonH,但UNION使结果集截然不同。只是想知道2个额外的区别是否帮助我做了一些我不知道的事情 – JamieD77

0

如果有超过1周的间隔,您可以使用递归cte做到这一点。

WITH WeeklyCTE AS 
(
    SELECT MIN(weekstart_date) AS weekstart_date 
    FROM MyTable 
    UNION ALL 
    SELECT DATEADD(week, 1, weekstart_date) 
    FROM WeeklyCTE 
    WHERE DATEADD(week, 1, weekstart_date) <= GETDATE() 
) 
SELECT t.reportdate, 
     w.weekstart_date 
FROM WeeklyCTE w 
     LEFT JOIN MyTable t ON w.weekstart_date = t.weekstart_date 
相关问题