2016-06-03 4 views
-3

У меня есть таблица с колонкой INT Id. Мне нужно выбрать идентификаторы как значения, разделенные запятыми, в подзапросе.SQL select list как значения, разделенные запятой

Я пробовал:

DECLARE @ids VARCHAR(MAX) 
SELECT @ids= COALESCE(@ids +',' ,'') + Convert(nvarchar(8), Id) 
FROM TableX 

SELECT @ids 

Это работает, но проблема в том, что я не могу использовать объявленную переменную. Есть ли способ избежать использования переменных?

Пример:

SELECT Id FROM TableX 

Результат:

1 
2 
5 
7 

Я хочу:

1,2,5,7 
+0

Вы можете добавить пример данные и ожидаемый результат? –

+1

Могу я спросить, в чем проблема, которую вы пытаетесь решить? Я понимаю, что может произойти какая-то ненужная гимнастика. – DMason

+0

http://stackoverflow.com/a/2105784/575376 –

ответ

0

Вы можете создать функцию, чтобы поместить код

create function dbo.csv() 
returns varchar(max) 
as 
begin 
    DECLARE @ids VARCHAR(MAX) 
    SELECT @ids= COALESCE(@ids +',' ,'') + Convert(nvarchar(8), Id) 
    FROM TableX 

    return @ids 
end 

И используйте fucntion в контексте того, что вы не можете использовать переменные

select dbo.csv() 

С уважением

3

попробуйте этот

DECLARE @query nvarchar(max) 

select @query = STUFF( (SELECT N',' + cast(id as nvarchar) 
from TableX 

FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)') ,1,1,'') 

select @query 

NO переменной:

select STUFF( (SELECT N',' + cast(id as nvarchar) 
    from TableX 
    FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)') ,1,1,'') 
+0

«Проблема в том, что я не могу использовать объявленную переменную» – Nicarus

+0

Я добавляю переменный случай –

+0

@ErikE, он цитировал исходный вопрос. –

Смежные вопросы