Объединить и разделять запятыми строки

#sql-server-2016

#sql-server-2016

Вопрос:

У меня есть этот запрос:

 SELECT
    c.br,
    c.no_,
    CONCAT(c.name, ' ', c.surname) AS Name,
    t.type,
    t.code,
    t.sub,
    GETDATE() AS date,
    c2.name 
FROM
    c 
    INNER JOIN t on c.rowno = t.rowno
    LEFT JOIN termjnt on t.rowno = termjnt.rowno
    LEFT JOIN c c2 on termjnt.rowno_c2 = c2.rowno
WHERE 
    t.status = 'active'
  

вот пример вывода

введите описание изображения здесь

как мне объединить c2.name строки для каждого no_? например, вместо того, чтобы Heather и Humphry были разными строками, я бы хотел, чтобы ячейка была «Хамфри, Хизер»

Комментарии:

1. у вас нет ничего, что могло бы определить порядок следования ваших имен. или это не проблема, если, например, вы вернули Heather, Humphrey или наоборот?

2. порядок имен не имеет значения — у них есть идентификационный номер, который я мог бы получить, но в данном случае это не имеет значения

Ответ №1:

Здесь можно было бы использовать самосоединение, но проблема заключается в определении того, в каком порядке представлять имена. Для этого я просто использовал алфавитный порядок имен для определения последовательности:

 WITH TEST
AS
(
SELECT 
    NAME = C.NAME ' ' C.SURNAME,
    NO_,
    ROW_NUMBER() OVER (PARTITION BY NO_ ORDER BY C.NAME ' ' C.SURNAME DESC) SEQ
FROM C
)
SELECT TEST.NO_, NAMECONCAT = TEST.NAME ', ' TEST2.NAME 
FROM TEST
    LEFT JOIN TEST TEST2
    ON TEST.NO_ = TEST2.NO_
    AND TEST.SEQ = TEST2.SEQ-1