繁体   English   中英

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

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

提示:本站收集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 行 '=' 附近的语法不正确。

我也不知道在这些问题框中的代码开头末尾放什么,让它像其他人一样在灰色框中很好地分开显示。 所以-我为此道歉。

1 个回复

删除两个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'
2 sum函数内的case语句的SQL语法错误

下面是我的代码: 问题是它说语句中缺少运算符: 香港专业教育学院一直试图找到它,我只是看不出错误所在。 谁能为我阐明一下? 此代码在MS Access 2013中完成。 先感谢您。 ...

3 嵌套IF语句中的语法错误

我需要一个验证数字是否为质数的过程。 语法似乎很好,但是出现以下错误: 查询:CREATE PROCEDURE prime_number(IN n INT)BEGIN SET @prime =“素数”; SET @n_prime =“非素数”; SET @divider = .. ...

7 内容类型case语句中的语法错误

这是我的Padrino应用程序中的代码,我无法弄清楚它是什么行或错误。 错误消息是“语法错误,意外的keyword_end期待$ end” 你能否指出我的错误,并建议我将来如何调试它? 谢谢 ...

8 case语句中“ then”处或附近的语法错误

我有我写的这个SQL语句。 我试图写的这个sql语句是在postgres中。 我在oracle中有相同的sql语句,它可以正常工作。 我已经阅读了语法,但是对我来说看起来不错。 oracle sql语句如下所示: 我写的postgres sql语句看起来像这样: 它在我的 ...

10 在shell中的case语句中获取语法错误

我是shell的新手,在这段代码之后 bat.sh:第38行:意外令牌newline' 'at.sh: line 38:附近的语法错误newline' 'at.sh: line 38: ;; 我想根据用户在命令行中给出的输入来运行一些功能 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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