数据库中的表行变列的方法

今天在论坛上看到有一个朋友问到了数据库表的行变列的问题,我给了一种解决方法,拼Sql脚本。
我想这个问题还是有点普遍性的,所以我把问题和答案留在这里,供有类似问题的朋友参考。如果谁有其他的以及更好的办法,欢迎贴出代码,大家共同进步。
原帖见: http://forums.microsoft.com/china/ShowPost.aspx?PostID=3059505&SiteID=15&mode=1
问题:

名称  价格  类型
A    23   AA
A    25   BB
A    26   CC
B    23   AA
B    25   BB
B    26   cc

表示成为这种形式:
名称  AA      BB    CC
A      23      25      26
B       23      25      26


我的解答:
其中表Tmp就代表你的那个表的名字:

DECLARE @Sql VARCHAR(8000)
DECLARE @TypeName VARCHAR(10)
SET @Sql = 'SELECT 名称'
DECLARE curType CURSOR READ_ONLY FORWARD_ONLY FOR (
 SELECT Distinct 类型 FROM TMP)
OPEN curType
FETCH NEXT FROM curType INTO @TypeName
WHILE @@Fetch_Status = 0
BEGIN
 SET @Sql = @Sql + Char(13) + Char(10) + ', Sum(Case When 类型=''' + @TypeName + ''' Then 价格 Else 0 End) AS ' + @TypeName

 FETCH NEXT FROM curType INTO @TypeName
END
CLOSE curType
DEALLOCATE curType
SET @Sql = @Sql + Char(13) + Char(10) + 'FROM Tmp GROUP BY 名称'
PRINT @Sql
Exec(@Sql)

 

注意,要求你的表中名称和类型2个字段构成唯一索引,否则会把价格合计到一起,就不正确了。

转载于:https://www.cnblogs.com/Ricky81317/archive/2008/03/25/1122165.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值