本帖最后由 zhang_yugang 于 2014-08-18 08:49:09 编辑

解决方案 »

  1.   


    Create table #temp(Col1 VARCHAR(20),col2 int)
     
    insert #temp
    select 'A',1
    UNION ALL
    select 'A',2
    UNION ALL
    select 'A',3
    UNION ALL
    select 'B',1
    UNION ALL
    select 'B',2
    UNION ALL
    select 'C',1
    UNION ALL
    select 'C',2
    UNION ALL
    select 'C',3
    UNION ALL
    select 'C',4
     
    --SQL:
    DECLARE @sql NVARCHAR(MAX),@colList1 NVARCHAR(MAX),@colList2 NVARCHAR(MAX)
    SELECT 
    @colList1 = STUFF(
    (
        SELECT ','+QUOTENAME(LTRIM(col2))
        FROM (SELECT DISTINCT COL2 FROM #temp) t
        FOR XML PATH('')
    ),1,1,'')
    ,@colList2 = 
    (
        SELECT ','+QUOTENAME(LTRIM(col2))+' NM'+LTRIM(col2)
        FROM (SELECT DISTINCT COL2 FROM #temp) t
        FOR XML PATH('')
    )SET @sql = N'
        select col1'+@colList2+N' from #temp a
        pivot
        (max(col2) for col2 in('+ @colList1 +')) b
    'EXEC(@sql)
      

  2.   

    非常感谢 楼上 这么快就有了 回复,不好意思,可能是我刚才描述的不清,
    造的数据规律性太强,稍微有一点出入。您再看下下面这个结果。1 数据准备:
    Create table #temp(Col1 VARCHAR(20),col2 int)insert #temp
    select 'A',1
    UNION ALL
    select 'A',2
    UNION ALL
    select 'A',3
    UNION ALL
    select 'B',5
    UNION ALL
    select 'B',6
    UNION ALL
    select 'C',8
    UNION ALL
    select 'C',8
    UNION ALL
    select 'C',9
    UNION ALL
    select 'C',9SELECT * FROM #temp2 原始数据
    Col1 col2
    A 1
    A 2
    A 3
    B 5
    B 6
    C 8
    C 8
    C 9
    C 93 希望要的数据结果为
    COL1 NM1 NM2 NM3 NM4
    A 1 2 3 NULL
    B 5 6 NULL NULL
    C 8 8 9 9
      

  3.   

    --添加了一临时表
    select *,rn=ROW_NUMBER() over (partition by col1 order by col2) into #t from #temp
    declare @s varchar(max)
    select @s=ISNULL(@s+',','')+'MAX(case when rn='''+convert(varchar,rn)+''' then col2 end) as [NM'+convert(varchar,rn)+']'
           from #t group by rn
    set @s='select col1,'+@s+'from #t group by col1'
    exec(@s)
    drop table #t