按 n 条记录的组将行转换为逗号分隔的字符串

素食主义者

基于此示例表

ID 姓名 压缩 NTID
1 胡安 123 H1
1 胡安 123 H2
2 约翰 456 H3
2 约翰 456 H4
2 约翰 456 H5

我想显示ntid为逗号分隔值但最多 2 个项目的组

预期结果

ID 姓名 压缩 NTID
1 胡安 123 H1、H2
2 约翰 456 H3、H4
2 约翰 456 H5

使用 SQL Server,有没有办法实现这一点?

通过使用该STRING_AGG函数,它将所有内容连接在一行中,但我需要将其分组为最多 2 个成员的组。

SELECT ID, NAME, ZIP, STRING_AGG(NTID,',')
FROM MyTable
GROUP BY ID, NAME, ZIP
戴尔K

因此,您可以使用修改后的行号(除以 2)将数据分组为 2 行的块,然后您可以使用string_agg().

您确实需要一种对行进行排序的方法(如果您想要一致的结果),我假设NTID会起作用,但是您可能有更好的列来排序。

declare @Test table (ID int, [NAME] varchar(32), ZIP varchar(12), NTID varchar(2));

insert into @Test (ID, [NAME], ZIP, NTID)
values
(1, 'Juan', '123', 'H1'),
(1, 'Juan', '123', 'H2'),
(2, 'John', '456', 'H3'),
(2, 'John', '456', 'H4'),
(2, 'John', '456', 'H5');

with cte as (
    select *
      , (row_number() over (partition by ID order by NTID) - 1) / 2 rn
    from @Test
)
select ID, [NAME], string_agg(NTID,',')
from cte
group by ID, [NAME], rn;

db<>在这里摆弄

注意:如果您将 DDL+DML 作为问题的一部分提供,那么回答起来就会容易得多。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章