Услуги Сертификаты Новости Статьи База знаний Алгоритмы Портфолио Скачать Ссылки Поиск
Услуги arrow Новости arrow Функция вывода значений в SQL-запросе через запятую для связи "многие к одному"
Функция вывода значений в SQL-запросе через запятую для связи "многие к одному" Версия для печати Отправить на e-mail
13.10.2009

Иногда нужно выбрать для таблицы №1 связанные по некоторому общему полю данные из таблицы №2, расположив информацию из таблицы №2 в виде строки, значения в которой разделены запятыми.

Ниже приведен пример, как это сделать средствами Microsoft SQL Server с помощью вызова пользовательской функции в теле запроса

1. Функция 

ALTER FUNCTION [dbo].[ufnsWaybills]
(
 @UINDeliveryItem varchar(36)
)
RETURNS varchar(MAX)
AS
BEGIN

DECLARE @Result varchar(MAX)
SET @Result = ''

SELECT @Result = @Result + CASE WHEN @Result <> '' THEN ', ' ELSE '' END + w.Number
FROM DeliveryList dl
LEFT JOIN Waybill w ON w.UIN = dl.UINWaybill
WHERE dl.UINDeliveryItem = @UINDeliveryItem
RETURN @Result

END

2. Запрос

SELECT
RowNumber = ROW_NUMBER() OVER (ORDER BY di.Number),
di.Number,
Waybills = dbo.ufnsWaybills(di.UIN)
FROM DeliveryItems di

3. Результат запроса:

RowNumber   Number    Waybills

1.                  00001      1313, 1224, 1422, 1001

2.                  12181      0001, 1021, 1110

3.                  13201      1002

 

Последнее обновление ( 13.10.2009 )