gpt4 book ai didi

sql - 如何在 SQL Server 的一行中返回多个具有相同 ID 号的文本字段?

转载 作者:行者123 更新时间:2023-12-04 05:26:04 24 4
gpt4 key购买 nike

我有表:

    ID   Note
1 1 aaa
2 1 bbb
3 1 ccc
4 2 ddd
5 2 eee
6 2 fff

我需要将其返回为:
   ID   Note1   Note2   Note3
1 1 aaa bbb ccc
2 2 ddd eee fff

谢谢!

最佳答案

您可以使用 PIVOT 此类查询的函数。如果您有已知数量的列,则可以对这些值进行硬编码:

select *
from
(
select id, note,
'Note' +
cast(row_number() over(partition by id order by id) as varchar(10)) col
from yourtable
) x
pivot
(
max(note)
for col in ([Note1], [Note2], [Note3])
) p

SQL Fiddle with Demo

如果您要拥有未知号码 notes你想变成列,那么你可以使用动态sql:
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)

select @cols = STUFF((SELECT distinct ','
+ QUOTENAME('Note' +
cast(row_number() over(partition by id order by id) as varchar(10)))
from yourtable
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')

set @query = 'SELECT id,' + @cols + ' from
(
select id, note,
''Note'' +
cast(row_number() over(partition by id order by id) as varchar(10)) col
from yourtable
) x
pivot
(
max(note)
for col in (' + @cols + ')
) p '

execute(@query)

SQL Fiddle with Demo

两者都会产生相同的结果。
| ID | NOTE1 | NOTE2 | NOTE3 |
------------------------------
| 1 | aaa | bbb | ccc |
| 2 | ddd | eee | fff |

或者,如果您不想使用 PIVOT函数,那么您可以使用带有 CASE 的聚合函数声明:
select id,
max(case when rn = 1 then note else '' end) Note1,
max(case when rn = 2 then note else '' end) Note2,
max(case when rn = 3 then note else '' end) Note3
from
(
select id, note,
row_number() over(partition by id order by id) rn
from yourtable
) src
group by id

SQL Fiddle with Demo

关于sql - 如何在 SQL Server 的一行中返回多个具有相同 ID 号的文本字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13199422/

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