【发布时间】:2014-09-05 16:30:48
【问题描述】:
我有一个如下所示的时间表查询:
User TimesheetStart TimesheetEnd
Allen 2014-07-01 2014-07-15
Allen 2014-08-01 2014-08-15
Allen 2014-08-16 2014-08-31
我有一个看起来像这样的日历视图。 [日期] 列定义了该月的第一个日期、15 号、16 号和最后一个日期。
我需要一个返回以下内容的查询。我只是无法理解我需要什么 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]
【问题讨论】:
-
您有
calendar别名,而在查询中您使用tsPeriods -
另外,当您说不起作用时,究竟发生了什么?您是否收到语法错误或错误结果?
-
@Bulat 为了清楚起见,我已经编辑了这个问题。它不适用于每个屏幕截图... RIGHT JOIN 仅返回时间表表中存在的日期,而不是丢失的日期。不知道为什么。
-
您确定 v_Timesheet_Periods 中有 9 月的日期吗?
-
@Bulat 是的。我有所有日期,可以过滤任何范围。日历延长至 2020 年。
标签: sql sql-server calendar sql-server-2012