我现在数据库中的数据是这样子的,
ID NAME Location
1   A   Shanghai
2   A   Shengzhen
2   B   Beijing
3   B   Hangzhou
我想把它变为以下这个样子:
Shanghai,Shengzhen什么的变为字段名。然后A的Location字段的内容都并为一行,高手请指教。ID NAME Shanghai Beijing Hangzhou Shengzhen
1   A   Shanghai                  Shengzhen                    
2   B            Beijing Hangzhou

解决方案 »

  1.   

    ID   NAME   Location 
    1       A       Shanghai 
    2       A       Shengzhen 
    2       B       Beijing 
    3       B       Hangzhou 
    --declare @sql varchar(8000)
    set @sql = 'selet name'
    select @sql = ',['+location+']=max(case when location  = '''+location+''' then location else '' end' from (select distinct location from table) a
    exec(@sql = ' from table group by name')
     
      

  2.   


    create table #
    (NAME varchar(10),   Location varchar(20))
    insert into #
    select        'A',       'Shanghai'   union all 
    select        'A',       'Shengzhen'  union all
    select        'B',       'Beijing'    union all
    select        'B',       'Hangzhou' select * from #declare @s varchar(1000)
    select @s='select name '
    select @s=@s+',max(case when location='''+location+''' then '''+location+''' else '' '' end )as '''+location+''''
           from # group by location
    select @s=@s+' from # group by name'
    exec( @s)/*
    name       Beijing Hangzhou Shanghai Shengzhen 
    ---------- ------- -------- -------- --------- 
    A                           Shanghai Shengzhen
    B          Beijing Hangzhou           */
      

  3.   


    create table #
    (NAME varchar(10),   Location varchar(20))
    insert into #
    select        'A',       'Shanghai'   union all 
    select        'A',       'Shengzhen'  union all
    select        'B',       'Beijing'    union all
    select        'B',       'Hangzhou' select * from # declare @s varchar(1000)
    select @s='select id=identity(int,1,1),name '
    select @s=@s+',max(case when location='''+location+''' then '''+location+''' else '' '' end )as '''+location+''''
           from # group by location 
    select @s=@s+'into ##t from # group by name'
    exec( @s)
    select * from ##t/*
    id          name       Beijing Hangzhou Shanghai Shengzhen 
    ----------- ---------- ------- -------- -------- --------- 
    1           A                           Shanghai Shengzhen
    2           B          Beijing Hangzhou           (所影响的行数为 2 行)
      */
      

  4.   

    ls的,我的真实数据记录不止这几条啊!
    select        'A',       'Shanghai'   union all 
    select        'A',       'Shengzhen'  union all
    select        'B',       'Beijing'    union all
    select        'B',       'Hangzhou' 
      

  5.   

    windy_5是我lz啊!谢谢楼上的顶贴,
      

  6.   

    刚写了一个列子:create table #(ID int,     CITY nvarchar(5),   NAME varchar(2) ,  AGE int)
    insert # select 1,         '上海',       'X',         23 
    insert # select 2,         '北京',       'X',         23 
    insert # select 3,         '上海',       'Y',         24 
    insert # select 4,         '深圳',       'Y',         24 
    insert # select 5,         '上海',       'Z',         24 gocreate table #2(ID int,     上海 nvarchar(5),北京 nvarchar(5),深圳 nvarchar(5),   NAME varchar(2) ,  AGE int)
    godeclare @s nvarchar(4000),@s2 nvarchar(4000),@s3 nvarchar(4000)
    select @s='',@s2='',@s3=''
    select @s=@s+','+quotename(CITY)+'=max(case when CITY='+quotename(CITY,'''')
                +' then '+quotename(CITY,'''')+' end)',
                @s2=@s2+' when  CITY='+quotename(CITY,'''')+' then NAME ',
                @s3=@s3+' when  CITY='+quotename(CITY,'''')+' then AGE 'from 
        # t
    group by CITY 
    order by (select min(ID) from # where CITY=t.CITY) asc--排序select @s2=',[Name]= max(case '+@s2+' end)', @s3=',[AGE]= max(case '+@s3+' end)'--插入记录:
    insert #2 exec('select row'+@s+@s2+@s3+' 
    from 
    (select * ,row=(select count(1) from # where CITY=t.CITY and ID!>t.ID )
    from # t)Tmp
    group by row')go
    select * from #2ID          上海    北京    深圳    NAME AGE         
    ----------- ----- ----- ----- ---- ----------- 
    1           上海    北京    深圳    Y    24
    2           上海    NULL  NULL  Y    24
    3           上海    NULL  NULL  Z    24
      

  7.   

    取第一个变量:
    create table #
    (NAME varchar(10),   Location varchar(20))
    insert into #
    select        'A',       'Shanghai'   union all 
    select        'A',       'Shengzhen'  union all
    select        'B',       'Beijing'    union all
    select        'B',       'Hangzhou' 
    declare @s nvarchar(4000)
    select @s=''
    select @s=@s+','+quotename(Location)+'=max(case when Location='+quotename(Location,'''')+' then '+quotename(Location,'''')+' else ''''  end)'
    from 
    #
    group by Locationexec ('select NAME'+@s+' from # group by Name')NAME       Beijing Hangzhou Shanghai Shengzhen 
    ---------- ------- -------- -------- --------- 
    A                           Shanghai Shengzhen
    B          Beijing Hangzhou