如何在子查询中使用Coalesce进行字符串连接?

时间:2011-04-12 02:46:03

标签: sql subquery concatenation sql-server-2000 coalesce

我正在尝试使用“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函数的子查询,那么它很好。即

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

没关系。所以我的问题是,如何将其作为子查询包含在内?

非常感谢

ps:这是SQL Server 2000特有的。

2 个答案:

答案 0 :(得分:3)

无法将其作为子查询包含在内:您必须将其移至UDF中。

在SQL Server 2005中,您可以使用XML PATH技术。但是对于SQL Server 2000,您必须有一个单独的标量UDF,其中包含表访问和连接

答案 1 :(得分:0)

据我所知, 如果你更喜欢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

希望它有效!