объединить результаты из подзапроса в одно значение - PullRequest
0 голосов
/ 04 мая 2018

У меня есть хранимая процедура, из которой я создаю отчет, и я натолкнулся на небольшую проблему, которую надеюсь решить.

Хранимая процедура принимает только один параметр:

@nID varchar(max)=null

Этот параметр может иметь значение NULL, иметь значение 1 = «1» или несколько значений «1,3»

У меня есть функция split, поэтому параметр, который может выглядеть следующим образом: «1,3,5» превратит его в «1», «3», «5».

Это часть моего оператора select (подзапроса)

Select Value1, 
(select tblIns.nDesc from tblIns where tblIns.nID in (SELECT items FROM 
dbo.SplitFunction(@nID, ',', 'nID'))) as 'Description'
From ....
Where ....

Запрос работает отлично, если в моем параметре @nID передано только 1 значение, однако, когда я передаю более одного значения, я получаю следующую ошибку:

Подзапрос вернул более 1 значения. Это не разрешено, когда подзапрос следует =,! =, <, <=,>,> = или когда подзапрос используется как выражение.

Моя цель состоит в том, чтобы иметь возможность объединить результат подзапроса, так что если я передам более 1 значения, 'Description' будет выглядеть примерно так

 Text1, Text2, Text2

Что-то подобное выполнимо? Или это потребует гораздо больше работы.

Без подзапроса я могу передать любое количество значений в SP, и это дает правильные результаты, мне просто нужно получить описание TEXT для параметров и объединить их в один столбец.

РЕДАКТИРОВАТЬ уточнение:

Таблицы

  nID       nDesc
  1         Text1
  2         Text2

Допустим, я передаю значения '1,2' в качестве моего параметра в хранимую процедуру, результаты, которые я надеюсь получить:

 Value1     Description
 Test       Text1, Text2

1 Ответ

0 голосов
/ 04 мая 2018

Чтобы сделать это в переменной, это будет помещать одиночные кавычки вокруг каждого значения и разделитель запятых:

DECLARE @OUTPUT as varchar(MAX)
Set @OUTPUT = ''

SELECT @OUTPUT = @OUTPUT + case when @OUTPUT = '' then '' else ', '  end + '''' + rtrim(TableValue) + ''''
    FROM dbo.Table

select @OUTPUT

- или вы можете сделать это встроенным, как это:

Select STUFF((
    SELECT ',' + TableValue    
    FROM dbo.TableLookup
    FOR XML PATH('')), 1, 1,'') 
FROM dbo.TableLookup
...