求一复杂SQL语句
我有一个表AA,有三个字段:区域等级,区域名称,部门名称
数据记录如下:
区域等级 区域名称 部门名称
1 广州区域 广州总部营业部
2 番禺区域 番禺石基营业部
2 番禺区域 广州总部营业部
3 佛山区域 佛山大沥营业部
等等
我想得到下面的结果
一级区域名称 二级区域名称 三级区域 部门
广州区域 番禺区域 广州总部营业部
番禺区域 番禺石基营业部
佛山区域 佛山大沥营业部
即:
(1)A表中有N级区域,结果表中就有N+1个字须.
(2)结果表中部门名称必须唯一.
[解决办法]
你这样的设计, 数据的层次是依赖于数据顺序的.
而数据库中的数据是无法保证存储顺序的, 所以你这样的设计并不能保证数据能够被正确的处理.
[解决办法]
create table #v (id int,n varchar(30),m varchar(30))
insert into #v
select 1, '广州区域 ', '广州总部营业部 ' union all
select 2, '番禺区域 ', '番禺石基营业部 ' union all
select 2, '番禺区域 ', '广州总部营业部 ' union all
select 3, '佛山区域 ', '佛山大沥营业部 '
select m,
max(case when id=1 then '广州区域 ' end) [一级区域名称],
max(case when id=2 then '番禺区域 ' end) [二级区域名称],
max(case when id=3 then '佛山区域 ' end) [三级区域名称]
from #v group by m
这个交叉表就可以的了吧?看到后面,我有点迷糊了~
[解决办法]
DDDDDDDD
[解决办法]
Create Table AA
(区域等级Int,
区域名称Nvarchar(20),
部门名称Nvarchar(50))
Insert AA Select 1, N '广州区域 ', N '广州总部营业部 '
Union All Select 2, N '番禺区域 ', N '番禺石基营业部 '
Union All Select 2, N '番禺区域 ', N '广州总部营业部 '
Union All Select 3, N '佛山区域 ', N '佛山大沥营业部 '
GO
Declare @S Nvarchar(4000)
Select @S = ' '
Select @S = @S + N ', Max(Case 区域等级 When ' + Cast(区域等级 As Varchar) + N ' Then 区域名称 Else ' ' ' ' End) As [ ' + Cast(区域等级 As Varchar) + N '级区域名称 ] '
From AA Group By 区域等级
Select @S = 'Select ' + Stuff(@S, 1, 1, ' ') + N ', 部门名称 From AA Group By 部门名称 '
Print @S
EXEC(@S)
GO
Drop Table AA
--Result
/*
1级区域名称2级区域名称3级区域名称部门名称
佛山区域佛山大沥营业部
番禺区域番禺石基营业部
广州区域番禺区域广州总部营业部
*/