【问题标题】:GROUP BY shows the same group more than once when using CASE使用 CASE 时,GROUP BY 多次显示同一组
【发布时间】:2014-12-04 23:13:29
【问题描述】:

我在使用 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           |
+------+--------------+

我确定我没有写错,但我似乎看不出它是什么。

【问题讨论】:

  • 您可以按整个case语句分组。

标签: sql tsql group-by case


【解决方案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

【讨论】:

    猜你喜欢
    • 2020-12-14
    • 2014-03-18
    • 2019-05-05
    • 1970-01-01
    • 2014-05-15
    • 2022-10-22
    • 2021-06-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多