Периодически возникает задача отображения форматированного списка строк из зависимой таблицы в результирующем множестве из исходной таблицы. Конечно можно завести переменную и простым запросом произвести конкатенацию, но часто бывает, что нужно произвести конкатенацию внутри большого запроса без процедурного процедурного программирования. И тогда на помощь приходит встроенная в SQL Server поддержка XML.
-- Исходная таблица DECLARE @a TABLE (id int) INSERT INTO @a (id) VALUES (1) INSERT INTO @a (id) VALUES (2) INSERT INTO @a (id) VALUES (3) -- Таблица данных DECLARE @b TABLE (id int, txt varchar(50)) INSERT INTO @b (id, txt) VALUES (1, 'A') INSERT INTO @b (id, txt) VALUES (1, 'B') INSERT INTO @b (id, txt) VALUES (1, 'C') INSERT INTO @b (id, txt) VALUES (2, 'D') INSERT INTO @b (id, txt) VALUES (2, 'E') INSERT INTO @b (id, txt) VALUES (2, 'F') INSERT INTO @b (id, txt) VALUES (3, 'G') INSERT INTO @b (id, txt) VALUES (3, 'H') INSERT INTO @b (id, txt) VALUES (3, 'I') -- Конкатенация строк -- для исходной таблицы -- в одном запросе через запятую SELECT a.id, STUFF(( SELECT DISTINCT ', ' + b.txt FROM @b b WHERE b.id = a.id FOR XML PATH('') ), 1, 2, '') FROM @a a
Комментарии
Отправить комментарий