使用CASE时,GROUP BY会多次显示同一组

时间:2014-10-09 21:37:02

标签: sql tsql group-by case

我在T-SQL中遇到CASE语句的问题

以下是查询:

Select 
 CASE WHEN cri.ChartRetrievalMethodID IS NULL THEN wfseg.SiteEventGroupID
 ELSE cri.ChartRetrievalMethodID END as Type,
 count(distinct c.chartid) TotalCharts 
From Sites s LEFT JOIN Charts c ON s.SiteID=c.SiteID 
LEFT JOIN ChartRetrievalInformation cri ON c.ChartID=cri.ChartID 
LEFT JOIN WFSiteEvents wfse ON wfse.SiteID=s.siteid 
LEFT JOIN WFSiteEventTypes wfset ON wfset.EventTypeID=wfse.EventTypeID 
LEFT JOIN WFSiteEventGroups wfseg ON wfset.SiteEventGroupID=wfseg.SiteEventGroupID
Where 
 wfse.EventStatusID in (1,2)
 and s.ProjectID=110
group by 
 cri.ChartRetrievalMethodID, wfseg.SiteEventGroupID 

我获得了很多行,而不是将它们组合成一行 - 例如:

+------+--------------+
| Type | Total Charts |
+------+--------------+
| 3    | 28           |
| 3    | 3            |
+------+--------------+

理想情况下,我希望将这两行混合在一起只是一行:

+------+--------------+
| Type | Total Charts |
+------+--------------+
| 3    | 31           |
+------+--------------+

我确定没有什么我写错了,但我似乎无法看到它是什么。

1 个答案:

答案 0 :(得分:1)

如果您在select语句的列列表中包含字段cri.ChartRetrievalMethodID, wfseg.SiteEventGroupID,那么您将清楚地了解为什么这些字段在具有该分组的多行中显示。

您要执行的操作是按照您Type调用的值进行分组。在另一个DBMS中,这就像GROUP BY Type一样简单,但in SQL Server you must repeat the full expression in the GROUP BY clause