我在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 |
+------+--------------+
我确定没有什么我写错了,但我似乎无法看到它是什么。
答案 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。