我有一个数据库,其中包含来自多家公司的信息,这些公司以不同的方式记录其数据。为了标记什么是贷项通知单/财务费用/发票/等-3家公司使用特定字段,而其他3家公司仅依靠正值或负值。
但是我需要总计-我将经常需要它们...所以我认为Sum Case陈述是必经之路。
我已经在该网站上阅读了许多类似的问题,但是找不到有效的修复程序。大多数不是针对SSMS的,就是不针对多个限定词的。
我可以按公司逐个汇总个人,但似乎应该有一种方法可以一次性完成所有工作。因此,这就是我要想到的:
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,状态1,第4行关键字附近的语法不正确 '然后'。消息102,级别15,状态1,第10行'='附近的语法不正确。 消息102,级别15,状态1,第11行,'='附近的语法不正确。
我也不知道这些问题框中的代码末尾要放什么,让它像其他所有人一样很好地分隔在灰色框中。所以,我为此表示歉意。
答案 0 :(得分: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'