请教高手一SQL 分组排序的问题,谢谢!
时间:2011-11-26
来源:互联网
请教各位高手指点迷津,谢谢!
分公司 部门
东莞东大区 直营店
东莞东大区电信组 电信厅
东莞西大区电信组 直营店
公司组织架构 直营店
公司组织架构 职能部门
华西大区 商超店
我想根据以上基础数据按分公司分组汇总数据,想得出来的数据结果格式为:
东莞东大区 直营店
东莞东大区合计 合计
东莞东大区电信组 电信厅
东莞西大区电信组 直营店
东莞西大区电信组合计 合计
公司组织架构 直营店
公司组织架构 职能部门
公司组织架构合计 合计
华西大区 商超店
华西大区合计 合计
作者: az_1613 发布时间: 2011-11-26
select * from( select company,dept,0 as flag from tb union all select company,'合计',1 from tb group by company )t order by company,flag
作者: AcHerat 发布时间: 2011-11-26
SQL code
select *
from(
select company,dept,0 as flag from tb
union all
select company,'合计',1 from tb group by company
)t
order by company,flag
东莞东大区 直营店 0
东莞东大区 合计 1
东莞东大区电信组 电信厅 0
东莞东大区电信组 合计 1
东莞东大区电信组合计 合计 0
东莞东大区电信组合计 合计 1
东莞东大区合计 合计 0
东莞东大区合计 合计 1
东莞西大区 直营店 0
东莞西大区 合计 1
东莞西大区电信组 电信厅 0
东莞西大区电信组 合计 1
东莞西大区电信组合计 合计 0
东莞西大区电信组合计 合计 1
东莞西大区合计 合计 0
东莞西大区合计 合计 1
公司组织架构 直营店 0
公司组织架构 职能部门 0
公司组织架构 合计 1
公司组织架构合计 合计 0
公司组织架构合计 合计 1
华西大区 商超店 0
华西大区 合计 1
谢谢你, 但是我试了下得出的结果为以上这样了,麻烦再帮我看下哦
作者: az_1613 发布时间: 2011-11-26
引用 1 楼 acherat 的回复:
SQL code
select *
from(
select company,dept,0 as flag from tb
union all
select company,'合计',1 from tb group by company
)t
order by company,flag
东莞东大区 直营店 0
东莞东大区 ……
不好意思, 我是在一个临时表中操作的,我刚加了两遍了,现在试了可以了, 能否继续帮我看下,以上只是步骤一, 步骤二我又得根据部门分组汇总, 得出的结果放在以上结果集的最下面, 步骤三,总汇总(汇总各部门总汇总数据的总集)放在结果集的最后一行
麻烦高手帮我看下,谢谢了
作者: az_1613 发布时间: 2011-11-26
--这个意思? --> 测试数据: [tb] if object_id('[tb]') is not null drop table [tb] create table [tb] (分公司 varchar(16),部门 varchar(8)) insert into [tb] select '东莞东大区','直营店' union all select '东莞东大区电信组','电信厅' union all select '东莞西大区电信组','直营店' union all select '公司组织架构','直营店' union all select '公司组织架构','职能部门' union all select '华西大区','商超店' --开始查询 select rid=ROW_NUMBER() over (order by 分公司,flag), 分公司=(case when flag=1 then 分公司+'合计' else 分公司 end),部门 from ( select *,0 as flag from [tb] union all select 分公司,ltrim(COUNT(1)),1 from [tb] group by 分公司 )t --结束查询 drop table [tb] /* rid 分公司 部门 -------------------- -------------------- ------------ 1 东莞东大区 直营店 2 东莞东大区合计 1 3 东莞东大区电信组 电信厅 4 东莞东大区电信组合计 1 5 东莞西大区电信组 直营店 6 东莞西大区电信组合计 1 7 公司组织架构 直营店 8 公司组织架构 职能部门 9 公司组织架构合计 2 10 华西大区 商超店 11 华西大区合计 1 (11 行受影响)
引用 2 楼 az_1613 的回复:
引用 1 楼 acherat 的回复:
SQL code
select *
from(
select company,dept,0 as flag from tb
union all
select company,'合计',1 from tb group by company
)t
order by company,flag
……
作者: geniuswjt 发布时间: 2011-11-26
作者: ssp2009 发布时间: 2011-11-26
先摆个想要的结果试试。大概10行测试数据即可。
作者: geniuswjt 发布时间: 2011-11-26
use Tempdb go --> --> if not object_id(N'Tempdb..#T') is null drop table #T Go Create table #T([分公司] nvarchar(8),[部门] nvarchar(4)) Insert #T select N'东莞东大区',N'直营店' union all select N'东莞东大区电信组',N'电信厅' union all select N'东莞西大区电信组',N'直营店' union all select N'公司组织架构',N'直营店' union all select N'公司组织架构',N'职能部门' union all select N'华西大区',N'商超店' Go Select [分公司]=ISNULL([分公司],''),[部门]=CASE WHEN GROUPING([分公司])=1 THEN N'總合计' ELSE ISNULL([部门],N'合计') END ,CASE WHEN GROUPING([部门])=0 THEN 0 ELSE COUNT(*) END AS con from #T GROUP BY [分公司],[部门] WITH rollup /* 分公司 部门 con 公司组织架构 直营店 0 公司组织架构 职能部门 0 公司组织架构 合计 2 东莞西大区电信组 直营店 0 东莞西大区电信组 合计 1 东莞东大区 直营店 0 东莞东大区 合计 1 东莞东大区电信组 电信厅 0 东莞东大区电信组 合计 1 华西大区 商超店 0 华西大区 合计 1 總合计 6 */
作者: roy_88 发布时间: 2011-11-26
lz你自己先想清楚要怎样,否则就是浪费时间。
先摆个想要的结果试试。大概10行测试数据即可。
A分公司 直营
A分公司 商超
A分公司 电信厅
A分公司合计 合计
...
B分公司 直营
B分公司 商超
B分公司 电信厅
B分公司合计 合计
直营店合计 合计
商超合计 合计
电信厅合计 合计
总合计 合计
结果排序大概为这样子,刚才我试了一楼的兄弟的办法,得出来的结果有点串位了
东莞东大区 直营店
东莞东大区电信组 电信厅
东莞东大区电信组合计 合计
东莞东大区合计 合计
作者: az_1613 发布时间: 2011-11-26
這樣? use Tempdb go --> --> if not object_id(N'Tempdb..#T') is null drop table #T Go Create table #T([分公司] nvarchar(8),[部门] nvarchar(4)) Insert #T select N'东莞东大区',N'直营店' union all select N'东莞东大区电信组',N'电信厅' union all select N'东莞西大区电信组',N'直营店' union all select N'公司组织架构',N'直营店' union all select N'公司组织架构',N'职能部门' union all select N'华西大区',N'商超店' Go Select [分公司]=ISNULL([分公司],'')+CASE WHEN GROUPING([分公司])=1 THEN N'總合计' ELSE ISNULL([部门],N'合计') END , CASE WHEN GROUPING([部门])=0 THEN [部门] ELSE RTRIM(COUNT(*)) END AS con from #T GROUP BY [分公司],[部门] WITH rollup /* 分公司 con 公司组织架构直营店 直营店 公司组织架构职能部门 职能部门 公司组织架构合计 2 东莞西大区电信组直营店 直营店 东莞西大区电信组合计 1 东莞东大区直营店 直营店 东莞东大区合计 1 东莞东大区电信组电信厅 电信厅 东莞东大区电信组合计 1 华西大区商超店 商超店 华西大区合计 1 總合计 6 */
作者: roy_88 发布时间: 2011-11-26
SQL code
這樣?
use Tempdb
go
--> -->
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([分公司] nvarchar(8),[部门] nvarchar(4))
Insert #T
select N'东莞东大区',N'直营店' uni……
谢谢您,得出来的结果应该是 分公司的名字中不能加上部门名称, 而且总合计上面还要汇总出每个部门的合计数据
应该结果要像
A分公司 直营
A分公司 商超
A分公司 电信厅
A分公司合计 合计
B分公司 直营
B分公司 商超
B分公司 电信厅
B分公司合计 合计
直营店合计 合计
商超合计 合计
电信厅合计 合计
总合计 合计
作者: az_1613 发布时间: 2011-11-26
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28