Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
sqlserver中基于join的转置_Sql_Sql Server - Fatal编程技术网

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它正在工作,谢谢。但是我可以建议如何将值放在单独的列中吗