sql行列轉換

2021-09-06 23:14:54 字數 1221 閱讀 5682

首先我們建立一張表,名為scoreinfo,各個欄位的設計如下圖,分別是name,course,score,表示姓名,成績與分數,如圖所示。

2我們往表中加入資料,分別新增小明與小花的語文和數學成績,如圖所示。

3接下來,我們要進行行列轉換,列應該是name,語文,數學。我們首先要考慮是如何得到列名,我們可以通過分組得到課程名稱。如圖所示,我們通過分組語句,從查詢結果我們可以看出課程名的拼接字串。

**:

declare @sql varchar(200)

select @sql=isnull(@sql+',','')+course from scoreinfo group by course

select @sql

效果:

4

接下來,關鍵的行轉列的函式pivot出場了,通過這個函式我們把分數填充到轉換的列語文、數學的列值。

declare @sql varchar(200)

select @sql=isnull(@sql+',','')+course from scoreinfo group by course

set @sql='select * from scoreinfo pivot(max(score) for course in ('+@sql+')) pivottable'  

exec(@sql)

5

我們執行後,可以得到行轉列的結果,如下圖所示。

6

通過以上幾個步驟,我們就可以輕鬆的實現行列轉換了。同樣,我們如果要把列轉換成行, 應該怎麼做呢?同樣我們可以採用unpivot函式輕鬆實現。

declare

@sql

varchar(200

)select

@sql

=isnull(@sql+'

,','')+course from scoreinfo group

bycourse

set@sql='

select * from scoreinfo pivot(max(score) for course in ('+

@sql+'

)) pivottable unpivot(score for course in('+

@sql+'

)) unpivotedtable

'exec(@sql)

通過上面的sql語句,如下圖所示:

sql行列轉換

問題 如果上述兩表互相換一下 即表結構和資料為 姓名 語文 數學 物理 張三 74 83 93 李四 74 84 94 想變成 得到如下結果 姓名 課程 分數 李四 語文 74 李四 數學 84 李四 物理 94 張三 語文 74 張三 數學 83 張三 物理 93 create table tb ...

SQL 行列轉換

資料列轉換成行。其中一列需要轉換成行,因為列的值不確定所以用動態執行sql sql物件拼寫出要轉換行的列的值。declare sql varchar 1000 select sql isnull sql advertise name from tbl advertise master select ...

sql行列轉換

1 靜態的行轉列 sql select start dt,max case type name when 總的參與人數 then value end as 總的參與人數 max case type name when 會員參與人數 then value end as 會員參與人數 max case ...