Как использовать Coalesce для объединения строк в подзапросе? - PullRequest
1 голос
/ 12 апреля 2011

Я пытаюсь объединить несколько значений строк из одной таблицы с помощью «Coalesce», разделенных запятой, и перечислить его как столбец в подзапросе.

Что-то по линии

Declare @assignTo nvarchar(4000)

Select 
table1.columnA
table1.columnB
(
select @assignTo = Coalesce(@assignTo + ', ', '') + CAST(Name as nvarchar(250))
from
table2    
where
...
)
from table1
where

.....

Я продолжаю получать "Неверный синтаксис рядом с '='."

Если я просто попытаюсь выполнить подзапрос, в котором вызывается функция Coalesce, это нормально. * 1010 т.е. *

 Declare @assignTo nvarchar(4000) 
 select @assignTo = Coalesce(@assignTo + ', ', '') + CAST(Name as nvarchar(250))
    from
    table2    
    where
    ...
  Select @assignTo

Отлично. Итак, мой вопрос, как мне включить его в качестве подзапроса?

Большое спасибо

ps: это характерно для SQL Server 2000.

Ответы [ 2 ]

3 голосов
/ 12 апреля 2011

Вы не можете включить его в качестве подзапроса: вам придется переместить его в UDF.

В SQL Server 2005 вы можете использовать технику XML PATH.Но для SQL Server 2000 у вас должен быть отдельный скалярный UDF с доступом к таблице и конкатенацией

0 голосов
/ 13 апреля 2011

Насколько я знаю, Вы можете сделать это, если вы предпочитаете делать как SubQuery. Но указанное решение является наиболее удобным.

Declare @assignTo nvarchar(4000)

Select 
table1.columnA
table1.columnB
tmp.[c]
from table1,
     (
      select @assignTo = Coalesce(@assignTo + ', ', '') + CAST(Name as nvarchar(250)) as [c]
      from
      table2    
      where
      ...
      ) as tmp
where

Надеюсь, что это работает!

...