2009-10-25 2 views
7

Мне нужна аналогичная функция для Oracle WM_CONCAT в SQL Server, которая возвращает список, разделенный запятыми, любым полем, переданным им в качестве аргумента. Например, в Oracle,Значение поля Concat для строки в SQL Server

select WM_CONCAT(first_name) from employee where state='CA' 

возвращение «Джон, Джим, Боб».

Как это сделать на SQL Server?

Благодаря

ответ

0

AFAIK, что вам нужно сделать это самостоятельно.

Вы можете создать определенную пользователем функцию, которая с помощью курсора будет содержать записи Employee, в которых состояние CA, и возвращает конкатенацию их имен.

+0

Нет, нет необходимости использовать CURSOR вообще. – gbn

3

Фактический ответ:

SELECT 
    SUBSTRING(buzz, 2, 2000000000) 
FROM 
    (
    SELECT 
     firstname 
    FROM 
     employee 
    WHERE 
     State = 'CA' 
    FOR XML PATH (',') 
    ) fizz(buzz) 

Общий вопрос здесь. Некоторые запросы:

+3

Стоит отметить, что это применимо только для SQL Server 2005 и более поздних версий. OP не указала, какую версию SQL Server они используют. –

+1

Вы можете заменить SUBSTRING командой STUFF, которая будет функционировать должным образом, без необходимости знать длину строки. – WesleyJohnson

+1

@Chris J: Я бы сказал, что SQL 2k5 является разумным предположением, что через 10 лет после того, как SQL 2000 RTM и версии 2.5 позже – gbn

2

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


    drop table #mike_temp 
go 

select * into #mike_temp 
    from (select 'Ken' as firstname, 'CO' as state 
     union all 
     select 'Mike' as firstname, 'CO' as state 
     union all 
     select 'Tom' as firstname , 'WY' as state 
     ) a 
go 

SELECT distinct 
     state 
     ,STUFF((SELECT ', ' + b.firstname FROM #mike_temp b where a.state = b.state FOR XML PATH('')),1, 2, '') AS CSVColumn 
    from #mike_temp a 
-3

попробовать этот

select  
    wm_concat(name) 
from 
    employee 
where 
    state='CA' 
group by 
    state 
+0

Неправильное использование. Он не работает в SQL Server, как указывал OP. Возможно, вы захотите удалить его или отредактировать, если вы имеете в виду что-то другое? – criticalfix

0
SELECT Field1, Substring(Field2, 2, LEN(Field2)) AS Field2 FROM 
(
    SELECT 
     [InnerData].Field1, 
     (SELECT ',' + Field2 FROM @Fields WHERE Field1=[InnerData].Field1 FOR XML PATH('')) AS Field2 
     FROM 
     (
      SELECT DISTINCT Field1 FROM @Fields 
     ) AS [InnerData] 
) AS OuterData 

Я получил этот запрос по этой ссылке

Refer this Link for more Clarification

0

В SQL Server 2017 функция STRING_AGG была добавлена ​​

SELECT t.name as TableName 
     ,STRING_AGG(c.name, ';') AS FieldList 
    FROM sys.tables t 
    JOIN sys.columns c 
    ON t.object_id = c.object_id 
    GROUP BY t.name;