繁体   English   中英

嵌套“sum(case when”)语句中的语法错误

[英]syntax error in a nested “sum(case when” statement

我有一个数据库,其中包含来自几家公司的信息,这些公司以不同的方式记录他们的数据。 要标记什么是贷项通知单/财务费用/发票/等 - 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM