我有一个表AA,有三个字段:区域等级,区域名称,部门名称
数据记录如下:
区域等级 区域名称      部门名称
1        广州区域      广州总部营业部   
2        番禺区域      番禺石基营业部  
2        番禺区域      广州总部营业部    
3        佛山区域      佛山大沥营业部                                    
等等
我想得到下面的结果
一级区域名称   二级区域名称   三级区域    部门                         
  广州区域      番禺区域                广州总部营业部       
                番禺区域                番禺石基营业部
                              佛山区域  佛山大沥营业部即:
(1)A表中有N级区域,结果表中就有N+1个字须.
(2)结果表中部门名称必须唯一.

解决方案 »

  1.   

    帮他加多一个identity(int,1,1),再交叉表
      

  2.   

    TO:ljsql
    具体怎么做?能不能说得具体点!
      

  3.   

    楼主的回复没有在点子上有层次且无限级的情况, 这样建立表就好了id  pid  区域名称      部门名称
    1   0    广州区域      广州总部营业部   
    2   1    番禺区域      番禺石基营业部  
    3   1    番禺区域      广州总部营业部    
    4   3    佛山区域      佛山大沥营业部  这样的设计即可支持无限级, 对数据存储顺序也不依赖(这个是无法控制的)
      

  4.   

    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
    这个交叉表就可以的了吧?看到后面,我有点迷糊了~
      

  5.   

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