繁体   English   中英

在 sql 中有总和值

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM