SQL 检查条件时 CASE 语句错误

SQL CASE Statement Error while checking conditions

场景是我有两列,一列是 Quantity,另一列是 Type。现在我要做的是检查类型是否为 "rec",然后它从数量中获取所有值并添加它们,如果类型为 "issue"。 =21=] 那么它将只获取那些类型为接收的字段,并根据 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'

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

您检查过 CASE 的语法吗?我认为您缺少查询中的 ELSE 部分

例如:-

SELECT OrderID, Quantity,
CASE
    WHEN Quantity > 30 THEN "The quantity is greater than 30"
    WHEN Quantity = 30 THEN "The quantity is 30"
    ELSE "The quantity is under 30"
END
FROM OrderDetails;

检查 here 语法

看来你需要在

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(),也许。

PPS。输出中的 TYPE 形式上不正确(与 ONLY_FULL_GROUP_BY 相矛盾),我建议用 ANY_VALUE().

包装它

i didn't get your recommendation of wrapping type with value can you please elaborate more.

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

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'