0

我正在尝试创建一个逗号分隔的列表,并且我正在使用派生表。但是我不能在LEFT OUTER JOIN...中声明变量我该怎么做?

    LEFT OUTER JOIN (

               DECLARE @String AS VARCHAR(MAX) = NULL
               SELECT @String = COALESCE(@String + ', ','') + Name
                 FROM MyTable
               SELECT @String, Col1
                 FROM MyTable
                GROUP BY Col1

    ) AS T8
   ON This = That

它给了我一个错误的Declare关键字,错误的语法。

谢谢!

4

2 回答 2

2

您不能在派生表中声明变量。

但是您可以在语句之外声明它并以与示例中相同的方式使用它

于 2012-02-07T21:25:14.290 回答
2

您的要求没有意义,因为该变量不能真正在表变量中使用。如果你想在表变量之后使用它,它仍然没有意义......你是否期望变量的多个实例,对于 Col1 的每个不同值一次?也许你的意思是:

LEFT OUTER JOIN
(
  SELECT Col1, String = STUFF((
     SELECT ',' + Name
        FROM dbo.MyTable AS i 
        WHERE i.Col1 = o.Col1 
        FOR XML PATH(''), 
        TYPE).value(N'./text()[1]', N'nvarchar(max)'),1,1,'')
  FROM dbo.MyTable AS o
  GROUP BY Col1
) AS T8
ON This = That

但是,T8 有点让我害怕。此联接中已涉及多少表?

于 2012-02-07T21:29:32.887 回答