2017-05-25
zelder
2018-09-06
25/05
2017

Конкатенация данных в запросе по привязанной таблице

Ситуация
Идет запрос в базу и происходит множественная выборка результатов

Задача
К каждому результату подцепить поле-результат, с перечислением из связанных таблиц

Решение (в XML)

Формат вывода:
<Entity><Id>1</Id><Name>Vasa</Name></Entity><Entity><Id>2</Id><Name>Peta</Name></Entity>

SELECT
T.[ID], (
SELECT OT.[ID], OT.[Name] AS Name
FROM tOtherTable OT
WHERE T.[ID] = OT.[Ref_ID]
ORDER BY OT.[SortOrder]
FOR XML PATH('Entity')
)
FROM tMainTable T


Решение (свой формат)

Формат вывода: 
1:Vasa;2:Peta


SELECT
T.[ID], STUFF((
SELECT ';' + CAST(OT.[ID] AS VARCHAR(36)) + ':' + OT.[Name]
FROM tOtherTable OT
WHERE T.[ID] = OT.[Ref_ID]
ORDER BY OT.[SortOrder]
FOR XML PATH('')
), 1, 1, '')
FROM tMainTable T


Решение (строка-перечисление через запятую)

 
Формат вывода: 
04ce4f90-e536-4cf1-9de6-09bb5cc035a3,ee0c69bf-8d06-4d17-9358-24061a4b2f12


SELECT
R.[ID],
STUFF((SELECT ',' + CAST(RRP.[ID] AS VARCHAR(36))
FROM tRRR RRP
 WHERE R.[ID] = RRP.[Rule_ID]
 ORDER BY RRP.[SortOrder]
 FOR XML PATH('')
), 1, 1, '')
FROM tRule R




.