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'
场景是我有两列,一列是 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'