zoukankan      html  css  js  c++  java
  • 数据库中的表行变列的方法

    今天在论坛上看到有一个朋友问到了数据库表的行变列的问题,我给了一种解决方法,拼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个字段构成唯一索引,否则会把价格合计到一起,就不正确了。

  • 相关阅读:
    Huffman树与编码
    Python引用复制,参数传递,弱引用与垃圾回收
    Git使用说明
    numpy使用指南
    Python Socket
    温故知新之 数据库的事务、隔离级别、锁
    Oracle数据库的语句级读一致性
    VirtualBox NAT方式与主机互相通信
    Linux的定时任务
    Redis学习
  • 原文地址:https://www.cnblogs.com/Ricky81317/p/1122165.html
Copyright © 2011-2022 走看看