我正在根据日期范围进行计数。当前查询确实返回正确的结果,但我需要其他信息。在当前形式下,查询将显示具有正确计数的项目。但是,我需要显示所有项目,即使在指定的日期范围内它们的计数为零。
这是SQL代码:
INSERT INTO @CreationCount (BaselineID, Name) SELECT distinct [BaselineID],[Name] FROM [Baseline_INFO] DECLARE @ReqType TABLE (Type nvarchar(128)) INSERT INTO @ReqType (Type) SELECT DISTINCT Tree.Type as 'Requirement Type' FROM [TREE] INNER JOIN [Project_INFO] ON [Project_INFO].[ProjectID]=[Tree].[Project_ID] INNER JOIN [Baseline_INFO] ON [Baseline_INFO].[BaselineID]=[Tree].[Baseline_ID] WHERE [Project_INFO].[Name] = 'Address Book' AND [Baseline_INFO].[Name] = 'Current Baseline' Group By Tree.Type SELECT Tree.Type as 'Requirement Type', COUNT(Tree.Type) as 'Number in Creation Range' FROM [Tree] INNER JOIN @ReqType As RT on RT.Type = Tree.Type INNER JOIN [Project_INFO] ON [Project_INFO].[ProjectID]=[Tree].[Project_ID] INNER JOIN @CreationCount AS CCount ON CCount.BaselineID=Tree.Baseline_ID WHERE [Project_INFO].[Name] = 'Address Book' AND CCount.Name = 'Current Baseline' AND [Tree].[creationDate] >= ('2010-01-01') and [Tree].[creationDate] < ('2020-01-01') GROUP BY tree.Type
当我执行此查询时,我得到以下结果:
https://dl.dropbox.com/u/17234826/SQLresult.png
这个结果是正确的,但是即使创建范围中没有需求,我也需要列出所有需求类型,即
https://dl.dropbox.com/u/17234826/SQLresult1.png
我尝试使用各种联接,IFNULL和ISNULL,但没有任何工作。
如果有人能指出我正确的方向,我将不胜感激。
修改第二个查询
SELECT Tree.Type as 'Requirement Type', COUNT(CASE WHEN [Tree].[creationDate] >= ('2010-01-01') and [Tree].[creationDate] < ('2020-01-01') THEN Tree.Type END) AS 'Number in Creation Range' FROM [Tree] INNER JOIN @ReqType As RT on RT.Type = Tree.Type INNER JOIN [Project_INFO] ON [Project_INFO].[ProjectID]=[Tree].[Project_ID] INNER JOIN @CreationCount AS CCount ON CCount.BaselineID=Tree.Baseline_ID WHERE [Project_INFO].[Name] = 'Address Book' AND CCount.Name = 'Current Baseline' GROUP BY tree.Type