【问题标题】:SQL CASE SUM WHENSQL CASE SUM WHEN
【发布时间】:2018-08-07 19:32:04
【问题描述】:

当在长查询中使用 SUM 时,我在尝试找出 CASE 时遇到了麻烦。以下是查询的当前相关部分 -

SELECT _various items_
SUM (nt.GALLONS) AS "2018 CCE gallons"
FROM MQ_CDS_NETTRAN nt
JOIN MQCCNSTORE s ON nt.COSTCENTER = s.COSTCENTER 
WHERE nt.CLRNTSYS = 'CCE'

我现在需要做的是放

WHERE nt.CLRNTSYS IN ('CCE','BAC')

并将加仑分别总结为“2018 CCE 加仑”或“2018 BAC 加仑”(CLRNTSYS 下除了“CCE”或“BAC”之外还有大约 8 个其他选项)。之前没有使用过 CASE,我还没有找到一个示例,您可以根据另一列中的数据对不同的列求和并为其命名。这将如何运作?

【问题讨论】:

    标签: sql sum case


    【解决方案1】:

    您可以尝试使用条件聚合函数。

    SELECT _various items_
    SUM (CASE WHEN nt.CLRNTSYS ='CCE' THEN nt.GALLONS ELSE 0 END) AS "2018 CCE gallons",
    SUM (CASE WHEN nt.CLRNTSYS ='BAC' THEN nt.GALLONS ELSE 0 END) AS "2018 BAC gallons"
    FROM MQ_CDS_NETTRAN nt
    JOIN MQCCNSTORE s ON nt.COSTCENTER = s.COSTCENTER 
    GROUP BY _various items_
    

    【讨论】:

    • 我不会删除 where 标准,因为它可能会返回不同的核心结果...
    • 有一个不同的 WHERE 标准 - 我只是把它放在我发布的内容之外,因为它是一个相当长的查询开始
    【解决方案2】:

    这应该可以使用 conditional aggregation:

    SELECT _various items_
        SUM (CASE WHEN nt.CLRNTSYS = 'CCE' THEN nt.GALLONS END) AS "2018 CCE gallons",
        SUM (CASE WHEN nt.CLRNTSYS = 'BAC' THEN nt.GALLONS END) AS "2018 BAC gallons"
    FROM MQ_CDS_NETTRAN nt
    JOIN MQCCNSTORE s ON nt.COSTCENTER = s.COSTCENTER 
    WHERE nt.CLRNTSYS IN ('CCE','BAC')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-14
      • 2014-08-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多