sqlserver中基于join的转置
个人资料表sqlserver中基于join的转置,sql,sql-server,Sql,Sql Server,个人资料表 name age john 25 nikita 29 运动桌: name games john basketball john volleyball john football nikita skating 期望输出: name games1 games2 games3 john basketball volleyball football nikita skating null null 如果存在基于名称变量的
name age
john 25
nikita 29
运动桌:
name games
john basketball
john volleyball
john football
nikita skating
期望输出:
name games1 games2 games3
john basketball volleyball football
nikita skating null null
如果存在基于名称变量的匹配,我想连接这两个表,然后返回游戏的值
在新变量中。
让我知道如何实现这一目标的任何建议 最简单的方法可能是将值聚合到字符串中,而不是在单独的列中。这并不完全是您所要求的,但它可能会满足您的要求:
select name, string_agg(game, ',') as games
from sports
group by name;
如果列数已知或最大,则可以与row_number()配合执行简单透视 示例
Declare @YourTable Table ([name] varchar(50),[games] varchar(50)) Insert Into @YourTable Values
('john','basketball')
,('john','volleyball')
,('john','football')
,('nikita','skating')
Select *
From (
Select [Name]
,[Games]
,[Col] = concat('games',row_number() over (partition by [name] order by [games]))
From @YourTable
) src
Pivot ( max([Games]) for Col in ([Games1],[Games2],[Games3],[Games4]) ) pvt
返回
Name Games1 Games2 Games3 Games4
john basketball football volleyball NULL
nikita skating NULL NULL NULL
您知道结果集中需要的列数吗?这是否回答了您的问题?是的@Gordon它正在工作,谢谢。但是我可以建议如何将值放在单独的列中吗