Объединение таблиц с конкатенацией - PullRequest
0 голосов
/ 26 мая 2020

У меня есть запрос SQL с оператором COALESCE для объединения всех строк в одну строку с разделителем (;). Вот код для построения запроса:

DECLARE @db NVARCHAR(max)  
SELECT @db = COALESCE(@db+';','') + OID FROM COD_TBL
SELECT OID = @db
INNER JOIN EMP_TBL ON EMP_TBL.ID=COD_TBL.ID

К сожалению, я получаю это возвращенное.

Сообщение 156, уровень 15, состояние 1, строка 4 Неправильный синтаксис рядом с ключевое слово 'JOIN'.

ТАБЛИЦА 1: EMP_TBL

ID NAME  
1  RICHARD
2  RAYMOND

ТАБЛИЦА 2: COD_TBL ​​

ID COD
1  AA
2  BB
1  CC
2  DD
1  EE
2  FF

ЖЕЛАТЕЛЬНЫЙ ВЫХОД:

ID NAME     OID  
1  RICHARD  AA;CC;EE
2  RAYMOND  BB;DD;FF

Помогите, пожалуйста, исправить запрос.

1 Ответ

0 голосов
/ 26 мая 2020

Один вариант - использовать функцию агрегирования строк string_agg() - доступно начиная с SQL Server 2017:

select e.id, e.name, string_agg(cod, ';') within group(order by cod) oid
from emp_tbl e
inner join code_tbl c on c.id = e.id
group by e.id, e.name
...