SQL Server 2008 如何对分组进行小计

Posted

技术标签:

【中文标题】SQL Server 2008 如何对分组进行小计【英文标题】:SQL Server 2008 how to Subtotal group 【发布时间】:2017-04-29 08:17:19 【问题描述】:

我正在尝试在下表的查询中添加小计:

Table A:          Table B:                     Table C:

ID    Name        ID     Name      SubOf       ID      Name      SubOf
===   ======      =====  =======   =====       ======  ======    =====
1     Name 1      1.1    SName 1   1           1.1.1   SSName 1  1.1
2     Name 2      1.2    SName 2   2           1.1.2   SSName 2  1.1
3     Name 3      1.3    SName 3   3           1.1.3   SSName 3  1.1

事务

ID        Qty
======    =======
1.1.1     100
1.1.2     50
1.1.3     200
1.1.1     100
1.1.2     50
1.1.3     200
1.1.1     100
1.1.2     50
1.1.3     200
1.1.1     100
1.1.2     50
1.1.3     200
1.1.1     100

我想像这样选择我的数据:

期望的结果:

ID        Name        Total
======    =======     =======
1         Name 1      1500    ->Total ID 1 
1.1       sName 1     1500    ->Total ID 1.1
1.1.1     ssName 1     500
1.1.2     ssName 2     200
1.1.3     ssName 3     800

如何像结果表一样添加小计?提前致谢。

【问题讨论】:

提示:GROUP BY 您的表结构未规范化。您应该在表 A、B、C 之间建立关联。那么 auto int 类型的 id 就足够了。 我明白了,有 subof 字段 - 我仍然更喜欢没有任何编码含义的简单 int id。 【参考方案1】:

使用 GROUP BY 对数量求和,使用 UNION ALL 组合 smae 结果中的不同分组,最后为基本查询使用 CTE

; with cte as
(
    select  ID1 = a.ID, Name1 = a.Name,
            ID2 = b.ID, Name2 = b.Name,
            ID3 = c.ID, Name3 = c.Name,
            t.Qty
    from    Trans t
            inner join tableC c on  t.ID    = c.ID
            inner join tableB b on  c.SubOf = b.ID
            inner join tableA a on  b.SubOf = a.ID
)
select  ID = ID1, Name = Name1, sum(Qty)
from    cte
group by ID1, Name1
union all
select  ID = ID2, Name = Name2, sum(Qty)
from    cte
group by ID2, Name2
union all
select  ID = ID3, Name = Name3, sum(Qty)
from    cte
group by ID3, Name3

【讨论】:

以上是关于SQL Server 2008 如何对分组进行小计的主要内容,如果未能解决你的问题,请参考以下文章

在 SQL Server 2008 R2 中对多行进行分组

根据 SQL Server 2008 R2 中特定列中的模式更改对行进行分组

sqlserver2008,sql编程,group by 用法

sqlserver2008,sql编程,group by 用法

sql 分组小计与合计语法

小计上方的 SQL Reporting Services 水平线