SQL - 数据透视表 - 每列不均匀的行

时间:2015-03-31 14:25:48

标签: sql-server-2008-r2 pivot-table

我正在尝试将这样的数据格式化为我要编写的报告: (每列不同的行数) 每个城市,必须显示郊区列表,然后显示他们拥有的车辆列表,例如奥斯汀。

    City    Suburbs   Vehicles
  1 Austin  Bastrop   Ford
  2         Hutto     Mazda
  3         Lakeway   Mercedes
  4         Luling  
  5         ShadyHollow 
  6         WellsBranch 
  7         BrushyCreek 
  8         Elgin   
  9         Jollyville  

  10  Dallas    Belmont         BMW
  11            Eastwood        Ford
  12            GreenlandHills  
  13            LakeParkEstates 
  14            Lochwood    

这是源数据

declare @Test0 table(city nvarchar(10), [state] varchar(30))
   insert into @Test0 values ('Austin',  'Texas')
   insert into @Test0 values ('Dallas',  'Texas')

 declare   @Test1 table (city nvarchar(10), suburb nvarchar(30) ) 
    insert into @Test1 values ('Austin',  'Bastrop')
    insert into @Test1 values ('Austin',  'Hutto')
    insert into @Test1 values ('Austin',  'Lakeway')
    insert into @Test1 values ('Austin',  'Luling')
    insert into @Test1 values ('Austin',  'ShadyHollow')
    insert into @Test1 values ('Austin',  'WellsBranch')
    insert into @Test1 values ('Austin',  'BrushyCreek')
    insert into @Test1 values ('Austin',  'Elgin')
    insert into @Test1 values ('Austin',  'Jollyville')
    insert into @Test1 values ('Dallas',  'Belmont')
    insert into @Test1 values ('Dallas',  'Eastwood' )
    insert into @Test1 values ('Dallas',  'GreenlandHills')
    insert into @Test1 values ('Dallas',  'LakeParkEstates')
    insert into @Test1 values ('Dallas',  'Lochwood')

  declare @Test2 table(city nvarchar(10), vehicle nvarchar(30))
     insert into @Test2 values ('Austin',  'Ford')
     insert into @Test2 values ('Austin',  'Mazda')
     insert into @Test2 values ('Austin',  'Mercedes-Benz')
     insert into @Test2 values ('Dallas',  'BMW')
     insert into @Test2 values ('Dallas',  'Ford' )



 select * from @Test0 t0 join @Test1 t1 on t0.city = t1.city
 join @Test2 t2 on t0.city = t2.city

我从哪里开始?是答案吗?我甚至转动? 谢谢

1 个答案:

答案 0 :(得分:2)

 select City, 
 (
 select suburb + ' ' from @test1 where city=a.city for xml path(''),
 type).value('.[1]', 'varchar(max)'
 ),
 (
 select vehicle+ ' ' from @test2 where city=a.city for xml path(''),
 type).value('.[1]', 'varchar(max)'
 ) 
 from @test0 a