【问题标题】:Show sum of grouped column in new row for each group在每组的新行中显示分组列的总和
【发布时间】:2014-09-19 15:11:10
【问题描述】:

我想在 sql 结果集中的每个组之后显示数据总和。

我有两张桌子 Group 1

-------------------------------------
Group       Name        Sale
-------------------------------------
G1          ABC1        10
.....................................
G1          ABC2        20
.....................................
G1          ABC3        40

和第 2 组

-------------------------------------
Group       Name        Sale
.....................................
G2          XYZ1        34
.....................................
G2          XYZ2        14
.....................................
G2          XYZ3        44

我想显示如下数据:

-------------------------------------
Group       Name        Sale
-------------------------------------
G1          ABC1        10
.....................................
G2          XYZ1        34
.....................................
TOTAL       TOTAL       44                -- Calculated Row
.....................................
G1          ABC2        20
.....................................
G2          XYZ2        14
.....................................
TOTAL       TOTAL       34                -- Calculated Row
.....................................
G1          ABC3        40
.....................................
G2          XYZ3        44
.....................................
TOTAL       TOTAL       84                -- Calculated Row
.....................................

这可能吗?

【问题讨论】:

  • 您需要知道如何将第一组的行与第二组的行匹配。然后你可以做一些UNIONs 来达到你的结果。可能会导致一些丑陋的 SQL。

标签: sql sql-server group-by


【解决方案1】:

我在这里做了一些假设。即“名称”始终为 4 个字符,如果它以“1”结尾,则它与另一个以“1”结尾的表中的名称相关。您可以在派生的 UnionTotal 表中最后一个联合 SELECT 语句的 LEFT OUTER JOIN 中看到这一点。

SELECT
    *
FROM
    (
        SELECT
            Substring(name, 4, 1) as sortOrder,
            Group,
            Name,
            Sale
        FROM Group1
        UNION ALL
        SELECT
            Substring(Name, 4, 1) as sortOrder,
            Group,
            Name,
            Sale
        FROM Group2
        UNION ALL
        SELECT
            Substring(G1.Name, 4, 1) as sortOrder,
            "Total" as Group,
            "Total" as Name,
            G1.Sale + G2.Sale as Sale
        FROM
            Group1 as G1
            LEFT OUTER JOIN Group2 as G2 ON
                Substring(G1.Name, 4, 1) = Substring(G2.Name, 4, 1)

    ) as unionTotal
ORDER BY sortOrder, Group;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-24
    • 2020-11-17
    • 2022-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多