日期:2014-05-19  浏览次数:20360 次

求一复杂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 '级区域名称 ] '