Как объединить все значения из нескольких строк в одну строку? - PullRequest
0 голосов
/ 25 февраля 2009

Допустим, у меня есть запрос:

SELECT Foo FROM Bar

Который возвращает

Foo
A
B
C

Что я на самом деле, что такое:
Foo
А, В, С

Таким образом, все значения из всех строк сведены в одну строку (запятые являются необязательными).
Есть ли способ использовать оператор select для этого, потому что я не хочу использовать курсоры?

Ответы [ 6 ]

2 голосов
/ 25 февраля 2009
DECLARE @foos VARCHAR(4000)

SELECT @foos = COALESCE(@foos + ',', '') + Foo FROM Bar

SELECT @foos AS Foo
1 голос
/ 25 февраля 2009
SELECT
    (   
    SELECT
      CASE
        WHEN ROW_NUMBER() OVER(ORDER BY bar) = 1 THEN ''
        ELSE ', '
      END + CAST(bar AS VARCHAR)
    FROM foo
    ORDER BY bar
    FOR XML PATH('')
    )
0 голосов
/ 25 февраля 2009
 select max(a),max(b),max(c) from
 (
      select 'a' as a,null as b,null as c
      union
      select null,'b',null
      union
      select null,null,'c'
 ) as x
0 голосов
/ 25 февраля 2009

Попробуйте взглянуть на этот ответ .

Это что-то вроде того, что вы хотите сделать.

0 голосов
/ 25 февраля 2009

Попробуйте следующее

declare @joined varchar(max)
set @joined = ''

select  @joined = @joined + IsNull(Foo + ',', '')
from    Bar (nolock)

--; Drop last "," if necessary
set @joined = substring(@joined, 1, len(@joined) - (case when len(@joined) > 0 then 1 else 0 end))
select  @joined as foo
0 голосов
/ 25 февраля 2009

Росс,

это должно помочь вам начать.

  DECLARE @r VARCHAR(8000)
  SELECT @r = (SELECT DISTINCT Foo + ', ' FROM Bar FOR XML PATH(''))
  IF @r IS NOT NULL AND @r <> '' SET @r = SUBSTRING(@r, 1, LEN(@r)-1)
  SELECT @r
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...