/*
--轉載請注明,謝謝
--作者: Paoluo
--日期: 2007-08-31
--用途: 將表中的Type的數據轉為列名
*/
--創建測試環境
Create Table TEST
(OrderID Int Identity (1, 1),
ID Int,
Type Varchar(10),
Score Int )
--插入數據
Insert TEST Select 1, 'A', 100
Union All Select 1, 'B', 90
Union All Select 2, 'A', 80
Union All Select 2, 'B', 85
Union All Select 2, 'C', 92
Union All Select 3, 'A', 87
GO
--測試
--察看原表數據
Select * From TEST
--如果Type是固定的
--寫出固定情況下的語句,是希望能幫助大家更好的理解動態SQL語句
--下面EXEC(@S)中執行即為此語句
Select
ID,
SUM(Case When Type = 'A' Then Score Else 0 End) As A,
SUM(Case When Type = 'B' Then Score Else 0 End) As B,
SUM(Case When Type = 'C' Then Score Else 0 End) As C
From
TEST
Group By
ID
--如果Type不是固定的,使用動態SQL語句
--定義變量
Declare @S Varchar(8000)
--賦初值,此句不能少
Select @S = ''
--從表中循環得到Type,並使用Type拼結語句
Select @S = @S + ', SUM (Case When Type = ''' + Type + ''' Then Score Else 0 End) As ' + Type
From TEST Group By Type
--拼結成完整的語句
Select @S = 'Select ID' + @S + ' From TEST Group By ID'
--執行動態SQL語句
EXEC(@S)
GO
--刪除測試環境
Drop Table TEST
--結果
/*
--表中原來數據
OrderID ID Type Score
1 1 A 100
2 1 B 90
3 2 A 80
4 2 B 85
5 2 C 92
6 3 A 87
--實現效果
ID A B C
1 100 90 0
2 80 85 92
3 87 0 0
*/