我們往表中加入數據,分別添加小明與小花的語文和數學成績,如圖所示。
接下來,我們要進行行列轉換,列應該是name,語文,數學。我們首先要考慮是如何得到列名,我們可以通過分組得到課程名稱。如圖所示,我們通過分組語句,從查詢結果我們可以看出課程名的拼接字符串。
代碼:
declare @sql varchar(200)
select @sql=ISNULL(@sql+',','')+course from scoreInfo group by course
select @sql
效果:
接下來,關鍵的行轉列的函數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)
我們運行后,可以得到行轉列的結果,如下圖所示。
通過以上幾個步驟,我們就可以輕松的實現行列轉換了。同樣,我們如果要把列轉換成行, 應該怎么做呢?同樣我們可以采用unpivot函數輕松實現。
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 unpivot(Score for Course in('+@sql+')) unPivotedTable' exec(@sql)
通過上面的sql語句,如下圖所示:
