无法解决这个问题,并且无法想知道出了什么问题:
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&#39; s示例,当客户只在一个分支机构时,总是正确; 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
答案 0 :(得分:0)
据我所知,您的查询是正确的并给出了正确的答案!出了点问题;我们会试着找出什么。它看起来像是在Microsoft SQL Server上运行,所以这就是我用于测试的内容。
这是原始表:
1> select * from p1;
2> go
code name branch salesp s1 v1 v2 change
----- ---- ------ ------ ---- ---- ---- --------
1 Max A S 20 5 10 -5
2 Ben A NULL 10 8 3 5
2 Ben B NULL 20 10 5 5
(3 rows affected)
以下是您的查询:
1> SELECT
2> CODE, NAME,
3> BRANCH, SALESP,
4> CASE
5> WHEN SUM(S1) = 0 THEN NULL
6> ELSE SUM(S1)
7> END as S1,
8> CASE
9> WHEN SUM(V1) = 0 THEN NULL
10> ELSE SUM(V1)
11> END as V1,
12> CASE
13> WHEN SUM(CHANGE) = 0 THEN NULL
14> ELSE SUM(CHANGE)
15> END as CHANGE
16> FROM
17> p1
18> WHERE
19> S1 <> 0
20> OR CHANGE <> 0
21> GROUP BY
22> CODE, NAME, BRANCH, SALESP
23> ;
24> go
......结果:
CODE NAME BRANCH SALESP S1 V1 CHANGE
------ ---- ------ ------ ----- ---- --------
1 Max A S 20 5 -5
2 Ben A NULL 10 8 5
2 Ben B NULL 20 10 5
(3 rows affected)
所以出了点问题。您可以尝试再次从原始表中进行选择吗?它是否包含任何其他数据?如果没有,那么 从SAESQL7_E03中选择*。[dbo]。[p1] 会是最好的。
如果有更多数据,请执行此操作以确保包含与上述查询中使用的行相同的行:
select
code,
name,
branch,
salesp,
s1,
v1,
v2,
change
from
SAESQL7_E03.dbo.p1
where
s1 <> 0
or change <> 0;
查询中的V1似乎返回源中v2的值。这是一个线索吗?虽然您正在聚合,但源数据中的每个组中都不会有多个值。这只是一个测试,每组有1行,是为了增加每组的行数吗?