CSDN SQL版常見問題之二--行轉列

/*
--轉載請注明,謝謝
--作者:  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
*/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值