[英]SQL CASE Statement Error while checking conditions
场景是我有两列,一列是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 语句。 请帮助我解决我的问题。 谢谢
看来你需要在
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()
,也许。
聚苯乙烯。 output 中的TYPE
形式上不正确(与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'
您检查过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;
检查这里的语法
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.