【发布时间】:2017-04-28 16:22:28
【问题描述】:
我正在制作类似于this 的日历样式报告。但是我的查询没有返回我需要的内容。我在日期表上使用RIGHT OUTER JOIN,但我还需要通过JobID 过滤结果。当我这样做时,它显然只返回带有JobID 的结果。我觉得我在这里遗漏了一些简单的东西......任何帮助将不胜感激!
原始查询:
SELECT t1.[TimeSheetLineID] ,
t1.[TimeSheetID] ,
t1.[JobID] ,
t1.[TimeSheetDate] ,
t1.[TimeSheetCreatedOn] ,
t1.[TimeSheetLastModifiedOn] ,
t1.[StartTime] ,
t1.[EndTime] ,
t1.[TotalTime] ,
t1.[EmployeeName] ,
t2.[FullYear] ,
t2.[WeekNumber] ,
t2.[WeekDay] ,
t2.[WeekDayName] ,
t2.[MonthDay] ,
t2.[MonthName] ,
t2.[MonthNumber]
FROM [dbo].[FactTimeSheets] t1
RIGHT OUTER JOIN dbo.DateLookup t2 ON t1.TimeSheetDate = t2.DateFull
WHERE (t1.JobID = @jobNumber) AND (t2.FullYear = @year) AND (t2.MonthNumber BETWEEN @startMonth AND @endMonth)
ORDER BY FullYear, MonthNumber, MonthDay, WeekDay
第二次查询,提供所有需要但未按 JobID 过滤的日期:
SELECT t1.[TimeSheetLineID] ,
t1.[TimeSheetID] ,
t1.[JobID] ,
t1.[TimeSheetDate] ,
t1.[TimeSheetCreatedOn] ,
t1.[TimeSheetLastModifiedOn] ,
t1.[StartTime] ,
t1.[EndTime] ,
t1.[TotalTime] ,
t1.[EmployeeName] ,
t2.[FullYear] ,
t2.[WeekNumber] ,
t2.[WeekDay] ,
t2.[WeekDayName] ,
t2.[MonthDay] ,
t2.[MonthName] ,
t2.[MonthNumber]
FROM [dbo].[FactTimeSheets] t1
RIGHT OUTER JOIN dbo.DateLookup t2 ON t1.TimeSheetDate = t2.DateFull
WHERE (t2.FullYear = @year) AND (t2.MonthNumber BETWEEN @startMonth AND @endMonth)
ORDER BY FullYear, MonthNumber, MonthDay, WeekDay
【问题讨论】:
标签: sql tsql join ssrs-2008-r2 outer-join