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
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
*/