SQL行轉列、列轉行(SQL Server版)

在SQL Server中使用SQL實現行轉列、列轉行,可以使用多種方法,在SQL 2005以前可以使用case when then...語句,但這種方法的問題在於列舉的列名要寫死,如果列名很多,case when 語句會很長,並不優雅。所以需要SQL Server提供新的語句能夠實現。在2005版本就推出了pivot/unpivot關鍵字,可以方便的實現。這方面的資料已經很多,這裏提供一個簡單的示例,以便快速上手。

一、SQL列轉行

假設有一張表,結構和數據是這樣子的:

想轉換爲如下的形式:

這個就是典型的列轉行的形式,需要使用unpivot。

SQL實現:

select 姓名,科目, val from [dbo].[科目成績]
unpivot (val for 科目 in([語文],[數學],[英語])) as u

二、SQL行轉列

現在假設已經有了這張表:

我們借用上面的SQL得到的臨時表,將其還原爲:

這是典型的行轉列的實現,需要用到pivot。

SQL實現:

with aa as(
select 姓名,科目, val from [dbo].[科目成績]
unpivot (val for 科目 in([語文],[數學],[英語])) as u)

select * from aa pivot(max(val) for 科目 in ([語文],[數學],[英語])) as tt
order by [語文] desc,[數學] desc,[英語] desc;

得到如下表格:

按照語文、數學、英語的分數依次降序排列。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章