【发布时间】:2018-01-29 18:55:29
【问题描述】:
无法解决这个问题,只是不知道出了什么问题:
SELECT
CODE, NAME,
BRANCH, SALESP,
CASE
WHEN SUM(S1) = 0 THEN NULL
ELSE SUM(S1)
END as S1,
CASE
WHEN SUM(V1) = 0 THEN NULL
ELSE SUM(V1)
END as V1,
CASE
WHEN SUM(CHANGE) = 0 THEN NULL
ELSE SUM(CHANGE)
END as CHANGE
FROM
SAESQL7_E03.[dbo].[p1]
WHERE
S1 <> 0
OR CHANGE <> 0
GROUP BY
CODE, NAME, BRANCH, SALESP
导致:
code name branch salesp s1 v1 change
-------------------------------------------------
1 Max A S 20 10 -5
2 Ben A 10 3 5
2 Ben B 20 5 10
问题出在第 3 列,如果客户在多个分行,这总是错误的。
(Max 的例子,当客户只在一个分支时,总是正确的;Ben 的例子有两个或多个分支,第一个分支总是正确的,后面的分支总是错误的)
原始表的正确数据是:
code name branch salesp S1 V1 V2 change
---------------------------------------------------
1 Max A S 20 5 10 -5
2 Ben A 10 8 3 5
2 Ben B 20 10 5 5
CHANGE 栏目来自:
SUM (V1-V2) AS CHANGE
【问题讨论】:
-
您在查询中使用了
S1列,但我在您的原始表中看不到该列。 -
你说事情不对,但不解释原因。向我们展示数据库架构、示例数据、当前和预期输出。请阅读How-to-Ask 这里是START 了解如何提高问题质量并获得更好答案的好地方。 How to create a Minimal, Complete, and Verifiable example
-
“第 3 列”在源表和结果中是“分支”,那么有什么问题?什么是列名,其中包含“错误值”?
-
我在您的 cmets 之后更正:问题出在最后一行当有重复的客户(相同的代码、名称)但不同的分支时,我得到错误的结果(V2 值被忽略并取为零) 正确结果应该是 5 而不是 10(第三行)
-
列名错误的是CHANGE