[英]Having sum values in sql
假设以下示例数据:
a | b | c | d | e | f
-----------------------------------------
400 | 1200 | 1 | 500 | 1 | 200
400 | 1200 | 1 | 500 | 1 | 200
400 | 1200 | 1 | 500 | 1 | 200
400 | 1200 | 1 | 500 | 1 | 200
400 | 1200 | 2 | 300 | 3 | 300
400 | 1200 | 2 | 300 | 3 | 300
401 | 800 | 3 | 100 | 4 | 100
401 | 800 | 4 | 100 | NULL| NULL
402 | 300 | NULL | NULL | NULL| NULL
我想让我的输出包含 a 列和 b 列的每个值的一个记录,以及不同 c 列的 d 列的总和。 所以,我的最终结果应该是这样的:
400 | 1200 | 800 | 500
400 | 800 | 200 | 100
401 | 300 | NULL| NULL
在 SQL 中是否有任何特定的语句用于执行此操作?
将Sum
聚合与Distinct
select a,b,sum(distinct d),sum(distinct f)
From yourtable
Group by a,b
以下查询返回您的预期结果:
SELECT a, b, SUM(Dval) AS d
FROM (
SELECT a, b, c, SUM(DISTINCT d) Dval
FROM Testtable
GROUP BY a, b, c
) R
GROUP BY a, b
ORDER BY a
使用示例数据实际执行:
DECLARE @Testtable TABLE (a INT, b INT, c INT, d INT);
INSERT INTO @Testtable (a, b, c, d) VALUES
(400, 1200, 1, 500),
(400, 1200, 1, 500),
(400, 1200, 1, 500),
(400, 1200, 1, 500),
(400, 1200, 2, 300),
(400, 1200, 2, 300),
(401, 800 , 3, 100),
(401, 800 , 4, 100),
(402, 300 , NULL, NULL);
SELECT a, b, SUM(Dval) AS d
FROM (
SELECT a, b, c, SUM(DISTINCT d) Dval
FROM @Testtable
GROUP BY a, b, c
) R
GROUP BY a, b
ORDER BY a
此查询将为您提供所需的结果:
SELECT a,
SUM(DISTINCT b) b,
SUM(d) d
FROM(
SELECT DISTINCT a,
b,
c,
d
FROM YourTable
) t
GROUP BY a
在子查询中,我们得到没有重复的行,然后 GROUP BY a 与聚合。
编辑
对于您的新记录集 - 相同的规则:
SELECT a,
SUM(DISTINCT b) b,
SUM(d) d,
SUM(DISTINCT f) f
FROM(
SELECT DISTINCT a,
b,
c,
d,
e,
f
FROM YourTable
) t
GROUP BY a
输出:
a b d f
400 1200 800 500
401 800 200 100
402 300 NULL NULL
select a,b,sum(f),d
from [table name]
where c>0
group by a,b,d
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.