SQL:如何在派生表中声明变量?

时间:2012-02-07 21:21:25

标签: sql-server-2008 left-join declare derived-table

我正在尝试创建逗号分隔列表,并且我正在使用派生表。但是我无法在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关键字上显示错误的语法错误。

谢谢!

2 个答案:

答案 0 :(得分:2)

您无法在派生表中声明变量。

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

答案 1 :(得分: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('.', 'nvarchar(max)'),1,1,'')
  FROM dbo.MyTable AS o
  GROUP BY Col1
) AS T8
ON This = That

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