bianhao    pinpai   dijige    mianji
  1111       萝卜      1         22.2
  1111       萝卜      2         23.6
  1111       白菜      1         12.3
  1111       黄瓜      1          1.2
  1111       黄瓜      2          1.6
  1111       黄瓜      3          1.5
  2222       玉米      1           12
  2222       萝卜      1           23转化成bianhao   第一个萝卜   第二个萝卜   第一个白菜    第一个黄瓜   第二个黄瓜  第三个黄瓜 第一个玉米
1111        22.2         23.6          12.3             1.2       1.6         1.5
2222         23                                                                          12
那种举例学习成绩的我已经知道用了, 现在不知道要这样实现怎么弄。
sql

解决方案 »

  1.   

    if OBJECT_ID('tempdb..#temp', 'u') is not null   drop table #temp;
    go
    create table #temp( [bianhao] varchar(100), [pinpai] varchar(100), [dijige] int, [mianji] float);
    insert #temp
    select '1111','萝卜','1','22.2' union all
    select '1111','萝卜','2','23.6' union all
    select '1111','白菜','1','12.3' union all
    select '1111','黄瓜','1','1.2' union all
    select '1111','黄瓜','2','1.6' union all
    select '1111','黄瓜','3','1.5' union all
    select '2222','玉米','1','12' union all
    select '2222','萝卜','1','23' --SQL:
    DECLARE @sql NVARCHAR(MAX), @colList NVARCHAR(MAX)
    SET @colList = STUFF(
    (
    SELECT ','+QUOTENAME('第'+LTRIM(dijige)+'个'+pinpai) 
    FROM (SELECT rowid=ROW_NUMBER() OVER(ORDER BY GETDATE()) ,* FROM #temp) t
    GROUP BY ','+QUOTENAME('第'+LTRIM(dijige)+'个'+pinpai)
    ORDER BY MIN(rowid)
    FOR XML PATH('')
    ),1,1,'')
    SET @sql = N'
        select * from 
        (select bianhao, pingpai=''第''+LTRIM(dijige)+''个''+pinpai, mianji from #temp) a
        pivot
        (max(mianji) for pingpai in('+ @colList +')) b
    'PRINT @sql
    EXEC(@sql)/*
    bianhao 第1个萝卜 第2个萝卜 第1个白菜 第1个黄瓜 第2个黄瓜 第3个黄瓜 第1个玉米
    1111 22.2 23.6 12.3 1.2 1.6 1.5 NULL
    2222 23 NULL NULL NULL NULL NULL 12
    */