Sql server 将多行文字合并为一行

Sql server 将多行文字合并为一行,sql-server,Sql Server,我有一组行显示员工的调动地点,如下所示。上一行的结束位置将是下一行的开始位置。有50000多名员工 Employee name transfer_date start_location end_location AA 1/1/2017 Canada US AA 1/1/2018 US Italy AA 1/1/2019

我有一组行显示员工的调动地点,如下所示。上一行的结束位置将是下一行的开始位置。有50000多名员工

Employee name  transfer_date  start_location   end_location
 AA            1/1/2017       Canada           US          
 AA            1/1/2018       US               Italy
 AA            1/1/2019       Italy            Australia

 BB            2/1/2016       Spain            US          
 BB            2/1/2019       US               Luxembourg
 
我需要将其转换为:

  Employee name  start_location   next_location1   next_location2   next_location3 
  AA             Canada           US               Italy            Australia
  BB             Spain            US               Luxembourg       NULL

 

借助
行数
旋转是此处的一个选项:

WITH cte AS (
    SELECT *, ROW_NUMBER() OVER (PARTITION BY [Employee name] ORDER BY transfer_date) rn
    FROM yourTable
)

SELECT
    [Employee name], 
    MAX(CASE WHEN rn = 1 THEN start_location END) AS start_location,
    MAX(CASE WHEN rn = 1 THEN end_location END) AS next_location1,
    MAX(CASE WHEN rn = 2 THEN end_location END) AS next_location2,
    MAX(CASE WHEN rn = 3 THEN end_location END) AS next_location3
FROM cte
GROUP BY
    [Employee name]
ORDER BY
    [Employee name];


表中的最大转移次数是多少(本例中为AA,共有3次转移)您的研究向您展示了哪些可能的方法?@George Joseph,可能的转账数量没有限制。在示例中,您已经停止了3次转账,并且提供的答案提供了一个模板,说明如何推断更多转账的相同情况。例如:在Tim提供的ans中,您可以为第四个位置转移添加rn=4的条件