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 中特定列中的模式更改对行进行分组
sqlserver2008,sql编程,group by 用法