gpt4 book ai didi

sql - 将具有相同 ID 的行拆分为列

转载 作者:行者123 更新时间:2023-12-04 02:00:58 25 4
gpt4 key购买 nike

我有一个看起来像这样的表:

ID    Name
1 John
1 Maria
1 Sam
2 Lisa
2 Martin

我想要这样的输出:

ID    NAME1    NAME2    NAME3
1 John Maria Sam
2 Lisa Martin NULL

我不想使用 pivot 函数,因为它不会给我这个结果(当尝试这个时)。

ID 只会生成具有相同 id nr 的 3 行,因此只有 3 个名称列。

完成此查询的 SP:

INSERT INTO [Database].[dbo].[TEST]
(
[ID],
[Contact1],
[Contact2],
[Contact3]
)

;WITH CTE
AS
(
SELECT
ID,
NAMN,
ROW_NUMBER() OVER(PARTITION BY P_ID ORDER BY NAMN) AS RowNum
FROM tabl1
WHERE VISA_EJ = 0
)
SELECT
[ID],
[1] AS [Contact1],
[2] AS [Contact2],
[3] AS [Contact3]
FROM CTE
PIVOT(MAX(NAMN) for RowNum in ([1],[2],[3])) AS [Contacts]

分号仍然出错。

最佳答案

您可以结合使用窗口函数和旋转:

;with cte as(select id,
name,
row_number() over(partition by id order by name) as rn
from table_name)
select id,
[1] as name1,
[2] as name2,
[3] as name3
from cte
pivot(max(name) for rn in([1],[2],[3]))p

或者你可以对子查询做同样的事情:

 select id,
[1] as name1,
[2] as name2,
[3] as name3
from (select id,
name,
row_number() over(partition by id order by name) as rn
from table_name) cte
pivot(max(name) for rn in([1],[2],[3]))p

编辑:

;WITH CTE
AS
(
SELECT
ID,
NAMN,
ROW_NUMBER() OVER(PARTITION BY P_ID ORDER BY NAMN) AS RowNum
FROM tabl1
WHERE VISA_EJ = 0
)

INSERT INTO [Database].[dbo].[TEST]
(
[ID],
[Contact1],
[Contact2],
[Contact3]
)

SELECT
[ID],
[1] AS [Contact1],
[2] AS [Contact2],
[3] AS [Contact3]
FROM CTE
PIVOT(MAX(NAMN) for RowNum in ([1],[2],[3])) AS [Contacts]

关于sql - 将具有相同 ID 的行拆分为列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31250595/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com