SQL的行列转换

weixin_42066028 2018-10-22 07:14:14
各位大神,请问行列转换如何写?
fcode comm
01 A
01 B
02 1
02 3

按照降序排列

fcode comm1 comm2
01 B A
02 3 1

请问这个要SQL 2008如何写?
...全文
326 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
二月十六 2018-10-23
  • 打赏
  • 举报
回复
引用 3 楼 weixin_42066028 的回复:
多谢版主,非常感谢! 有没有写成查询的语句,我需要在视图里处理。

如果你的数据固定可以写成查询语句,如果不固定动态的话,只能这样
吉普赛的歌 2018-10-23
  • 打赏
  • 举报
回复
引用 3 楼 weixin_42066028 的回复:
多谢版主,非常感谢! 有没有写成查询的语句,我需要在视图里处理。
你这种不固定列数的行列转置, 没有办法写成视图。
weixin_42066028 2018-10-23
  • 打赏
  • 举报
回复
多谢版主,非常感谢! 有没有写成查询的语句,我需要在视图里处理。
二月十六 2018-10-22
  • 打赏
  • 举报
回复
--测试数据
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([fcode] nvarchar(22),[comm] nvarchar(21))
Insert #T
select N'01',N'A' union all
select N'01',N'B' union all
select N'02',N'1' union all
select N'02',N'3'
Go
--测试数据结束
DECLARE @sql VARCHAR(MAX)
SET @sql = ';WITH cte AS (
Select *,ROW_NUMBER()OVER(PARTITION BY fcode ORDER BY comm DESC) rn from #T
)
select fcode'
;WITH cte AS (
Select *,ROW_NUMBER()OVER(PARTITION BY fcode ORDER BY comm DESC) rn from #T
)
SELECT @sql = @sql + ',max(case rn when ' + RTRIM(rn)
+ ' then comm else null end)[comm' + RTRIM(rn) + ']'
FROM ( SELECT DISTINCT
rn
FROM cte
) a
SET @sql = @sql
+ ' from cte group by fcode;'
EXEC(@sql)



weixin_42066028 2018-10-22
  • 打赏
  • 举报
回复
在线等大神给答案

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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