新客网WWW.XKER.COM:致力做中国最专业的网络学院!
学院: 操作系统 - 网络应用 - 服务器 - 网络安全 - 工具软件 - 办公软件 - Web开发 - 数据库 - 网页设计 - 图形图像 - 媒体动画 - 硬件学堂 - 存储频道 - QQ专区
您的位置:首页 > 软件开发 > 数据库 > 数据库综合 > 正文:高手指招 数据库中表行变列的方法

高手指招 数据库中表行变列的方法

新客网 XKER.COM 2008-03-27 来源: 收藏本文
 今天在论坛上看到有一个朋友问到了数据库表的行变列的问题,我给了一种解决方法,拼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个字段构成唯一索引,否则会把价格合计到一起,就不正确了。
收藏】 【评论】 【推荐】 【投稿】 【打印】 【关闭
发表评论
要记得去论坛讨论,点击注册新会员匿名评论
评论内容:不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
阅读排行
随机推荐
实用信息推荐