首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

队列转化的,别复制

2013-09-06 
行列转化的,别复制。bianhaopinpaidijigemianji1111萝卜122.21111萝卜223.61111白菜112.31111黄瓜11.21111

行列转化的,别复制。



  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


[解决办法]

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个玉米
111122.223.612.31.21.61.5NULL
222223NULLNULLNULLNULLNULL12
*/

热点排行