sql 行專列 列轉行 普通行列轉換

主要應用case語句來解決行轉列的問題

行轉列問題主要分爲兩類

1)簡單的行轉列問題:

示例表:

id  sid           course  result

1   2005001 語文     80.0
2   2005001 數學     90.0
3   2005001 英語     80.0
4   2005002 語文     56.0
5   2005002 數學     69.0
6   2005002 英語     89.0

執行

select sid,語文=isnull(sum(case course when '語文' then result end),0),
   數學=isnull(sum(case course when '數學' then result end),0),
   英語=isnull(sum(case course when '英語' then result end),0)
   from result
   group by sid
   order by sid

得出結果

sid           語文 數學 英語

2005001 80.0  90.0  80.0
2005002 56.0  69.0  89.0

2)較爲複雜的行轉列

表1:course

id name

1 語文
2 數學
3 英語


表2:result

id sid          course  result

1 2005001 語文      80.0
2 2005001 數學      90.0
3 2005001 英語      80.0
4 2005002 語文      56.0
5 2005002 數學      69.0
6 2005002 英語      89.0

declare @sql varchar(8000)
set @sql='select sid'
select @sql=@sql+','+course.name+'=isnull(sum(case course when '''+course.name+''' then result end),0)'
 from course order by id
set @sql=@sql+' from result group by sid order by sid'
print @sql
exec(@sql)

得出結果

sid           語文 數學 英語

2005001 80.0  90.0  80.0
2005002 56.0  69.0  89.0

 

發佈了61 篇原創文章 · 獲贊 4 · 訪問量 14萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章