生成
sql代碼
生成靜態: select * from (select sname,[Course ] ='數學',[Score]=[數學] from Tb_students union all select sname,[Course]='英語',[Score]=[英語] from Tb_students union all select sname,[Course]='語文',[Score]=[語文] from Tb_students)t order by sname,case [Course] when '語文' then 1 when '數學' then 2 when '英語' then 3 end go --列轉行的靜態方案:UNPIVOT,sql2005及以后版本 SELECT sname,Subject, grade from dbo.Tb_students unpivot(grade for Subject in([語文],[數學],[英語]))as up GO --列轉行的動態方案:UNPIVOT,sql2005及以后版本 --因為行是動態所以這里就從INFORMATION_SCHEMA.COLUMNS視圖中獲取列來構造行,同樣也使用了XML處理。 declare @s nvarchar(4000) select @s=isnull(@s+',','')+quotename(Name) from syscolumns where ID=object_id('Tb_students') and Name not in('sname') order by Colid exec('select sname,[Subject],[grade] from Tb_students unpivot ([grade] for [Subject] in('+@s+'))b') go select sname,[Subject],[grade] from Tb_students unpivot ([grade] for [Subject] in([數學],[英語],[語文]))b