我在case条件语句中检查以下条件时出现语法错误: 下面是我正在使用的代码。 错误消息是“ ORA-00905:缺少关键字”。 但是我找不到丢失的东西。 ...
提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供 中文繁体 英文版本 中英对照 版本,有任何建议请联系yoyou2525@163.com。
我有一个数据库,其中包含来自几家公司的信息,这些公司以不同的方式记录他们的数据。 要标记什么是贷项通知单/财务费用/发票/等 - 3 家公司使用某个字段,而其他 3 家公司仅依赖正值与负值。
但我需要总计——而且我会经常需要它们……所以我认为 Sum Case 语句是通向 go 的方法。
我已经阅读了该站点上的许多类似问题-但我没有找到有效的修复程序。 大多数要么不适用于 SSMS,要么不涉及多个限定符。
我可以逐个公司获得个人总计 - 但似乎应该有一种方法可以在一个 go 中完成所有工作。 所以这就是我想出的:
SUM(CASE WHEN((ff29='invoice' AND (import_source_id=1 OR import_source_id=2 OR import_source_id=6)) OR (amount_invoice>0 AND (import_source_id=4 OR import_source_id=5 OR import_source_id=8)) THEN CAST(amount_invoice AS DECIMAL(18,2)) ELSE 0 END) AS 'Debits',
SUM(CASE WHEN((ff29='credit memo' AND (import_source_id=1 OR import_source_id=2 OR import_source_id=6)) OR (amount_invoice<0 AND (import_source_id=4 OR import_source_id=5 OR import_source_id=8)) THEN CAST(amount_invoice AS DECIMAL(18,2)) ELSE 0 END) AS 'Credits'
我希望我的结果显示为每家公司(import_source_id)的 2 列(借方和贷方)——但只包括某些结果——我数据库中的每家公司记录的结果不同。
消息 156,级别 15,State 1,第 4 行关键字“THEN”附近的语法不正确。 消息 102,级别 15,State 1,第 10 行 '=' 附近的语法不正确。 消息 102,级别 15,State 1,第 11 行 '=' 附近的语法不正确。
我也不知道在这些问题框中的代码开头末尾放什么,让它像其他人一样在灰色框中很好地分开显示。 所以-我为此道歉。
删除两个WHEN
之后的左括号(或在 THEN 之前添加右括号):
SUM(CASE
WHEN
(ff29='invoice' AND (import_source_id=1 OR import_source_id=2 OR import_source_id=6))
OR
(amount_invoice>0 AND (import_source_id=4 OR import_source_id=5 OR import_source_id=8))
THEN CAST(amount_invoice AS DECIMAL(18,2))
ELSE 0
END) AS 'Debits',
SUM(CASE
WHEN
(ff29='credit memo' AND (import_source_id=1 OR import_source_id=2 OR import_source_id=6))
OR
(amount_invoice<0 AND (import_source_id=4 OR import_source_id=5 OR import_source_id=8))
THEN CAST(amount_invoice AS DECIMAL(18,2))
ELSE 0
END) AS 'Credits'
另外为什么不使用 IN 来简化:
SUM(CASE
WHEN
(ff29='invoice' AND (import_source_id IN (1,2,6))
OR
(amount_invoice>0 AND (import_source_id IN (4,5,8))
THEN CAST(amount_invoice AS DECIMAL(18,2))
ELSE 0
END) AS 'Debits',
SUM(CASE
WHEN
(ff29='credit memo' AND (import_source_id IN(1,2,6))
OR
(amount_invoice<0 AND (import_source_id(4,5,8))
THEN CAST(amount_invoice AS DECIMAL(18,2))
ELSE 0
END) AS 'Credits'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.