行转列求助

一只小小菜鸟 2014-11-04 07:04:50

如何将上图转成


...全文
123 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
KeepSayingNo 2014-11-05
  • 打赏
  • 举报
回复
看看我这个,和你的需求一样 http://blog.csdn.net/dotnetstudio/article/details/22054499
一只小小菜鸟 2014-11-05
  • 打赏
  • 举报
回复
解决了,谢谢各位啦!
中国风 2014-11-05
  • 打赏
  • 举报
回复
DECLARE @s NVARCHAR(MAX)
   ,@Rows INT
SELECT TOP 1
        @Rows = COUNT(1)
FROM    表
GROUP BY 商品
ORDER BY COUNT(1) DESC
SET @s = ''
WHILE @Rows > 0 
    SELECT  @s = ',[机构' + RTRIM(@Rows) + ']=max(case when [Rows]='
            + RTRIM(@Rows) + ' then [机构] else '''' end),[数量' + RTRIM(@Rows)
            + ']=max(case when [Rows]=' + RTRIM(@Rows)
            + ' then [数量] else 0 end),[金额' + RTRIM(@Rows)
            + ']=sum(case when [Rows]=' + RTRIM(@Rows)
            + ' then [金额] else 0 end)' + @s
           ,@Rows = @Rows - 1

EXEC('select [商品]'+@s+'  from (SELECT *,[Rows]=ROW_NUMBER()OVER(PARTITION BY 商品 ORDER BY 机构) FROM 表) as A group by [商品]')
还在加载中灬 2014-11-04
  • 打赏
  • 举报
回复
动态行转列
DECLARE @SQL NVARCHAR(MAX)
SET @SQL='SELECT[商品]'
SELECT @SQL=@SQL+',MAX(CASE[机构]WHEN'''+[机构]+'''THEN[机构]END)[机构]'
		+',MAX(CASE[机构]WHEN'''+[机构]+'''THEN[数量]END)[数量]'
		+',MAX(CASE[机构]WHEN'''+[机构]+'''THEN[金额]END)[金额]'
	FROM(SELECT[机构]FROM TB GROUP BY[机构])T
SET @SQL=@SQL+'FROM TB GROUP BY[商品]'
EXEC(@SQL)
还在加载中灬 2014-11-04
  • 打赏
  • 举报
回复
我假设你的四列分别是[商品],[机构],[数量],[金额] 你参考下
SELECT
	[商品]
	,MAX(CASE[机构]WHEN'机构1'THEN[机构]END)[机构]
	,MAX(CASE[机构]WHEN'机构1'THEN[数量]END)[数量]
	,MAX(CASE[机构]WHEN'机构1'THEN[金额]END)[金额]
	,MAX(CASE[机构]WHEN'机构2'THEN[机构]END)[机构]
	,MAX(CASE[机构]WHEN'机构2'THEN[数量]END)[数量]
	,MAX(CASE[机构]WHEN'机构2'THEN[金额]END)[金额]
	,MAX(CASE[机构]WHEN'机构3'THEN[机构]END)[机构]
	,MAX(CASE[机构]WHEN'机构3'THEN[数量]END)[数量]
	,MAX(CASE[机构]WHEN'机构3'THEN[金额]END)[金额]
FROM
	TB
GROUP BY
	[商品]
如果有机构4呢?是再横过去吗? 如果是的话,建议在程序上处理,在SQL处理很不划算

22,207

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧