加入日历表以查找缺少日期的时间表

时间:2014-09-05 16:30:49

标签: sql sql-server calendar sql-server-2012

我有一个时间表查询,如下所示:

User    TimesheetStart    TimesheetEnd
Allen   2014-07-01        2014-07-15
Allen   2014-08-01        2014-08-15
Allen   2014-08-16        2014-08-31

我的日历视图看起来像这样。 [Date]列定义了该月的第一个日期,第15个,第16个和最后一个日期。

Calendar

我需要一个返回以下内容的查询。我无法绕过我需要的JOIN。我在日历视图上尝试了RIGHT JOIN,但是无法正常工作。

User    TimesheetStart    TimesheetEnd    TimesheetPeriodBeginning
Allen   2014-07-01        2014-07-15      2014-07-01
Allen   NULL              NULL            2014-07-16
Allen   2014-08-01        2014-08-15      2014-08-01
Allen   2014-08-16        2014-08-31      2014-08-16
Allen   NULL              NULL            2014-09-01
Allen   NULL              NULL            2014-09-16

NULL表示缺少时间表条目。

到目前为止我有:

SELECT ts.Fields (truncated for clarity)
    ,calendar.Fields (truncated for clarity)
FROM [dbo].[timesheet] AS ts
--this join isn't working...
RIGHT JOIN [dbo].[v_Timesheet_Periods] AS calendar
ON ts.StartDate = calendar.[Date]

enter image description here

1 个答案:

答案 0 :(得分:0)

看起来您的结束数据在您的加入中重叠。 你需要考虑时间吗? 那么你应该使用> =和a<为了结束?

SELECT ts.Fields (truncated for clarity)
    ,calendar.Fields (truncated for clarity)
FROM [dbo].[timesheet] AS ts
--this join isn't working...
RIGHT OUTER JOIN [dbo].[v_Timesheet_Periods] AS calendar
ON ts.StartDate >= tsPeriods.[Date]
    AND ts.EndDate < tsPeriods.[Date]