SQL列轉行


生成

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM