#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