【发布时间】:2020-12-14 09:17:36
【问题描述】:
当尝试使用 sum 函数时,我在使用 CASE 和否定值时得到了错误的值,我不知道为什么。 (否定的值被减去两次)。
我的目标是在类型 c_calcType 为 'calcCorrection' 的情况下从 sum/groupBy 中减去它。
使用时:
SELECT Sum(CASE WHEN c_calcType = 'calcCorrection' THEN (c_calcValue * -1)
ELSE c_calcValue END) as c_calcValue,
c_parentID
FROM DB_Calc
WHERE c_parentID is not null AND c_state <> 'deactiveted'
GROUP BY c_parentID
我得到的值 (c_calcValue) 返回 500,但我不包括 750。过滤和进行手动计算时,我得到了正确的值。
作为示例的表格如下所示:
| c_calcvalue | c_parentID | c_calcType |
|---|---|---|
| 1000 | 5 | None |
| 250 | 5 | calcCorrection |
奇怪的是,如果说 WHERE c_ParentID = 5 AND c_calcType = 'calcCorrection' 我得到了 -250,或者如果我在 THEN 表达式中说 (THEN 0 else c_calcValue),总和也是正确的。
【问题讨论】:
-
您应该尝试在 dbfiddle 中复制它。对于您提供的数据,结果应该是您所期望的。此外,您的查询引用了示例数据中没有的列。
标签: sql sql-server sum case