首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

求一复杂SQL语句,该怎么处理

2012-03-16 
求一复杂SQL语句我有一个表AA,有三个字段:区域等级,区域名称,部门名称数据记录如下:区域等级区域名称部门

求一复杂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级区域名称部门名称
佛山区域佛山大沥营业部
番禺区域番禺石基营业部
广州区域番禺区域广州总部营业部
*/

热点排行