mysql - 如何对 SQL 中 CASE-WHEN 中具有相同参数的不同行的值求和

标签 mysql sql sum case-when

这是我的代码,这是我的问题:

我有三个不同的 codCanal 值,我想将其命名为 Rota(02、03 和 05)。但是当我运行此查询时,我得到了该值的三个不同行。像这样的东西:

Ano | Mes | Canal | Volume
2015 | 01 | AS | 4423
2015 | 01 | Rota | 552
2015 | 01 | Rota | 744
2015 | 01 | Rota | 1223 
2015 | 01 | HSA | 6510

我只想显示 1 行这些值的总和 (552 + 744 + 1223)。我该如何解决这个问题?

我尝试使用 SUM(CASE WHEN) 但它返回一个新列,这不是我想要的。

谢谢。

SELECT
    Vendas.datAno AS Ano,
    Vendas.datMes AS Mes,

    CASE WHEN Cliente.codCanal IN ('01') THEN 'AS'
    WHEN Cliente.codCanal IN ('02','03','05') THEN 'Rota'
    WHEN Cliente.codCanal IN ('08') THEN 'HSA'
    END AS Canal,

    ROUND(SUM(Vendas.vlrVolumeLiquido),0) AS Volume

FROM
    tblDadMetaRealCliente Vendas
    INNER JOIN
    tblCadOrganizacaoVenda OV
    ON Vendas.codOrganizacaoVenda = OV.codOrganizacaoVenda
    INNER JOIN
    tblCadCliente Cliente
    ON Vendas.codCliente = Cliente.codCliente
    INNER JOIN
    categoria_simulador_nova Catsim
    ON Vendas.codMaterial = Catsim.codMaterial

WHERE
    Catsim.Catsim IN ('CHESTER LANCHE') AND
    Vendas.datAno IN ('2014', '2015') AND
    Cliente.codCanal IN ('01', '02', '03', '05', '08')

GROUP BY
    Vendas.datAno,
    Vendas.datMes,
    Cliente.codCanal

ORDER BY
    Vendas.datAno,
    Vendas.datMes,
    Cliente.codCanal

最佳答案

您需要在 GROUP BY 子句中使用转换后的列名称,以便它将它们合并为一组。

GROUP BY Vendas.datAno, Vendas.datMes, Canal
ORDER BY Vendas.datAno, Vendas.datMes, Canal

以上是针对MySQL的。在 SQL-Server 中,您需要将查询移至子查询中。

SELECT Ano, Mes, Canal, SUM(Volume) AS Volume
FROM (your query) AS subquery
GROUP BY datAno, datMes, Canal

关于mysql - 如何对 SQL 中 CASE-WHEN 中具有相同参数的不同行的值求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34419857/

相关文章:

sql - 我的错误在哪一行?将数据类型 nvarchar 转换为数字时出错

sql - 如何将逗号分隔列表与值匹配?

mysql - INNER JOIN 与 2 CASE

java - 转换日期时间并插入 MySQL

mysql - 增加 MySql Innodb 行长度以避免错误 139

sql - PostgreSQL 条件,其中日期 > "first day of the month"

python - Numpy Sum 数组坐标有效地转换为数组

SQL - 划分一个值并确保它重新计算为原始值

python - 如何将 Pandas 中的数据帧相加超过 5 个

PHP/MySql 多个下拉列表不希望选项值在页面源中可见