我有一个数据库,其中包含来自多家公司的信息,这些公司以不同的方式记录其数据。 为了标记什么是贷项通知单/财务费用/发票/等-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行关键字'THEN'附近的语法错误。 消息102,级别15,状态1,第10行'='附近的语法不正确。 消息102,级别15,状态1,第11行第'='附近的语法不正确。

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

#1楼 票数: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'

  ask by Lizzie925 translate from so

未解决问题?本站智能推荐:

5回复

Case语句中的SQL除以零错误和语法错误

我正在用SQL生成报告。 我的错误除以零。 为了解决此错误,我在SQL查询中使用了大小写。 现在我在'as'处收到语法错误。 有谁可以帮助我解决此问题?
2回复

CASE语句语法错误

我试图写一个案例声明,但是遇到了一些问题。 它incorrect syntax near '='返回incorrect syntax near '='
2回复

使用Case语句时的语法错误

我正在使用CASE语句根据select语句的值打印各个季节 错误: 讯息4145,第15级,州1,第5行 在需要条件的上下文中在“ THEN”附近指定的非布尔类型的表达式。 请有人可以建议这段代码有什么问题吗?
1回复

CASE语句中的SUM和COUNT

这是下面所附的出席记录表。 预期输出为: 我正在尝试根据状态列获取一个月中星期一和星期六的叶子数量 我的查询是 请帮助我获得预期的输出。
1回复

尝试在case语句中下一个多个选择查询时的语法错误

我已经从上面开始了存储过程。 这个想法是,您可以搜索多个列,因此在给定的搜索中不存在大多数数据。 我正在尝试根据随值传递的参数来创建不同的搜索。 我从这些答案之一中获取了上述内容的常规语法,但出现以下错误。 显然我做错了,如果要紧,这是SQL Server 2017 消息102,
5回复

CASE语句中的许多WHEN条件(合并)

如果需要大约100个垃圾箱,该如何在SQL Server 2008中进行垃圾箱处理? 我需要根据合并变量是否属于100个相等间隔之一来对记录进行分组。 例如,如果存在连续可变的年龄,我可以写: 但是这个过程会很耗时吗? 还有其他方法可以做到这一点吗?
1回复

在sqlselect语句中获取语法错误

这个问题不太可能对将来的访客有所帮助; 它仅与较小的地理区域,特定的时间段或极为狭窄的情况(通常不适用于Internet的全球受众)有关。 要获得使该问题更广泛适用的帮助 , 请访问帮助中
3回复

汇总CASE语句中的COUNT和SUM之差

完全公开,我正在学习,并且已经在整个互联网上进行了搜索,但无法弄清楚我的问题。 我正在上在线课程,并得到以下示例: 返回以下结果: 我理解了(我认为),所以我开始弄乱代码以进一步了解Case语句。 查看代码,我认为Orders字段本质上是查找一个月内的所有订单,为每个订单分配1