我有一个(SQL Server)Right Join / Group by 查询,旨在返回一年中的所有周(一周开始),并计算每周交付的项目数。该查询针对两个表运行;WeeksOfyear(其中 Week_Beginning 字段是每周第一个星期一的日期)和 projects(其中 project.Target_Date_Week_Beginning 包含项目目标交付的周开始日期。)如下所示:
周刊
ID Week_Beginning
1 2013-12-29
2 2014-01-05
3 2014-01-12
等等
项目
ID Name Target_Date_Week_Beginning FK_Programme
1 1234-Smith Street 2014-06-29 4
2 Marge Lane 2014-07-20 4
3 1234 Smith Street2 2014-10-26 3
4 Marge Lane (Branch Design) 2015-11-01 null
5 Papertray 2014-11-02 1
6 OpenSalad 014-09-28 1
7 Leamington Pie 2014-11-30 1
查询的目的是返回一年中的所有星期,并计算每周交付的属于指定程序的项目数(FK_Programme(作为参数@ProgrammeParamater))。
SELECT dbo.WeeksOfyear.Week_Beginning, COUNT(dbo.Project.ID) AS Total_Projects
FROM dbo.Project right JOIN
dbo.WeeksOfyear ON dbo.Project.Target_Date_Week_Beginning = dbo.WeeksOfyear.Week_Beginning
GROUP BY dbo.WeeksOfyear.Week_Beginning, dbo.Project.FK_Programme, dbo.Project.ID
HAVING (dbo.Project.FK_Programme = @ProgrammeParamater)
or (dbo.Project.ID IS NULL)
ORDER BY dbo.WeeksOfyear.Week_Beginning
但是,当查询运行时,返回的结果不包括项目交付但不属于指定计划的一年中的几周。奇怪的是,查询返回没有项目交付的任何一周。如果 WeeksOfYear 表中有 52 条记录,我需要查询返回 52 条记录。
我知道我可以从 WeeksOfyear 表中选择每一行并执行子查询来计算该周到期的项目,但这似乎是一种非常低效的方法。
这让我很难过,非常感谢任何帮助。
谢谢
亚当