首页 > 解决方案 > 检查条件时出现 SQL CASE 语句错误

问题描述

场景是我有两列,一列是Quantity,另一列是Type。现在我要做的是检查类型是否为“rec”,然后它从数量中获取所有值并添加它们,如果类型为“问题”,那么它将只获取那些类型正在接收的字段并将它们全部添加到ITEM ID的基础。我写的 SQL 查询在这里:

 SELECT f.`Itemm_ID`,ABS(SUM(f.`Quantity`)) AS recieving, TYPE ,
(CASE 
WHEN f.`Type` = 'issue'
THEN ABS(SUM(f.`Quantity`))
END)
FROM stock_journal AS f
WHERE f.`Itemm_ID`='1'

现在事情是一切正常,除了返回 null 的 CASE 语句。请帮助我解决我的问题。谢谢

标签: mysqlsqlcase

解决方案


看来你需要在

SELECT f.`Itemm_ID`,
       ABS(SUM(f.`Quantity`)) AS recieving, 
       TYPE,
       ABS(SUM(CASE WHEN f.`Type` = 'issue'
                    THEN f.`Quantity`
                    ELSE 0
                    END))
FROM stock_journal AS f
WHERE f.`Itemm_ID`='1'

PS。f.Quantity可能是负数吗?如果没有,那ABS()就是多余的。如果它可能那么ABS()必须包裹内部f.Quantity,而不是整体SUM(),也许。

聚苯乙烯。TYPEin 输出形式上是不正确的(与 矛盾ONLY_FULL_GROUP_BY),我建议用ANY_VALUE().


我没有得到您对具有价值的包装类型的建议,请您详细说明一下。

我的意思是(也许,我不确定)你需要

SELECT f.`Itemm_ID`,
       SUM(ABS(f.`Quantity`)) AS recieving, 
       TYPE,
       SUM(CASE WHEN f.`Type` = 'issue'
                THEN ABS(f.`Quantity`)
                ELSE 0
                END)
FROM stock_journal AS f
WHERE f.`Itemm_ID`='1'

推荐阅读