SQL多行转多列
--★轉換結果如上圖
1、首先創(chuàng)建表:
CREATE TABLE [成績表]( [編號] [int]IDENTITY(1,1) NOT NULL, [姓名] [varchar](50)NULL, [語文] [numeric](5, 2)NULL, [數(shù)學] [numeric](5, 2)NULL, [英語] [numeric](5, 2)NULL ) ON [PRIMARY]2、插入測試數(shù)據
INSERT INTO 成績表([姓名],[語文],[數(shù)學],[英語]) VALUES('道一',80,100,90.8),('老二',48,56,60),('張三',88,78,90),('李四',80,90,95),('王五',67,68,56),('劉六',77,68,80)3、執(zhí)行語句進行行列轉換
declare @sql_1 varchar(8000) select @sql_1='' select @sql_1= @sql_1 + 'select [編號],[姓名],['+name+'] AS ''成績'','''+name+''' AS ''課程'' from 成績表 union all ' from syscolumns where id=object_id('成績表') and CHARINDEX(name,'編號,姓名')=0 select @sql_1= @sql_1 + ' select distinct null,null,null,null from 成績表 ' --注意!多一行 selectdistinct null,null,null,null from 成績表 不加會報union all錯誤 print @sql_1 declare @sql_2 varchar(8000) select @sql_2='select [課程] ' select @sql_2=@sql_2 + ',SUM(case when [姓名] = '''+[姓名]+''' then 成績 else 0 end) '''+[姓名]+''' ' from 成績表 select @sql_2=@sql_2 + ' from ( '+@sql_1 +') as tb where ISNULL([編號],'''')<>'''' group by [課程]' print @sql_2 execute(@sql_2)執(zhí)行行列轉換后的結果如圖:
4、繼續(xù)添加一些數(shù)據
INSERT INTO 成績表([姓名],[語文],[數(shù)學],[英語]) VALUES('鬼七',67,68,56),('王八',77,68,80)5、繼續(xù)執(zhí)行步驟3的腳本,動態(tài)查詢隨表變化,結果如圖:
?
總結
- 上一篇: 梦到棉花是胎梦吗
- 下一篇: SCOM数据库整理索引计划出错