2

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

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

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

非常感谢

ps:这是特定于 SQL server 2000 的。

4

2 回答 2

4

不能将其作为子查询包括在内:您必须将其移动到 UDF 中。

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

于 2011-04-12T05:02:23.400 回答
0

据我所知,如果你喜欢作为子查询,你可以这样做。但上述解决方案是最方便的解决方案。

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

希望它有效!

于 2011-04-13T00:34:21.537 回答