Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2008 SQL:如何在派生表中声明变量?_Sql Server 2008_Left Join_Declare_Derived Table - Fatal编程技术网

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

Sql server 2008 SQL:如何在派生表中声明变量?,sql-server-2008,left-join,declare,derived-table,Sql Server 2008,Left Join,Declare,Derived Table,我试图创建一个逗号分隔的列表,并使用一个派生表。但是我不能在左外连接中声明变量。。。我该怎么做 LEFT OUTER JOIN ( DECLARE @String AS VARCHAR(MAX) = NULL SELECT @String = COALESCE(@String + ', ','') + Name FROM MyTable SELECT @Strin

我试图创建一个逗号分隔的列表,并使用一个派生表。但是我不能在左外连接中声明变量。。。我该怎么做

    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关键字上给了我一个错误,即语法不正确


谢谢

不能在派生表中声明变量


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

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


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

您的要求没有意义,因为变量实际上不能在表变量中使用。如果要在table变量之后使用它,它仍然没有意义。。。您是否希望该变量有多个实例,每个不同的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让我有点害怕。此联接中已经涉及了多少个表?

您的要求没有意义,因为该变量实际上不能在表变量中使用。如果要在table变量之后使用它,它仍然没有意义。。。您是否希望该变量有多个实例,每个不同的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让我有点害怕。此联接中已涉及多少个表?

我尝试过,但它在+名称下加下划线,给出了错误:在预期条件的上下文中指定了非布尔类型的表达式。哪个表有Name列?否,一定没有问题:选择@String=COALESCE@String + ', ',MyTable中的+Name必须累计Name列中的所有值。当然,尝试只执行这个声明字符串的语句。当执行DECLARE@string AS VARHCARMAX=NULL时,选择@string=COALESCE@String+“,”,+MyTable中的名称它执行得很好…太好了!下一步是将您的计算字符串添加到派生表中:左外连接SELECT@string,Col1 FROM MyTable GROUP BY Col1,因为T8I尝试了这一点,并在+名称下面加下划线,给出错误:在需要条件的上下文中指定了非布尔类型的表达式。哪个表具有名称列?否,必须没有问题:选择@String=COALESCE@StringMyTable中的+'、'、+Name必须累计Name列中的所有值。当然,尝试只执行这个声明字符串的语句。当执行DECLARE@string AS VARHCARMAX=NULL时,选择@string=COALESCE@String+“,”,+MyTable中的名称它执行得很好…太好了!下一步是将您的计算字符串添加到派生表中:左外连接SELECT@string,Col1 FROM MyTable GROUP BY Col1,因为T8I在它是8的时候不会存在。。。更好的办法是先提出一个观点,然后从那里出发吗?几乎没有足够的信息来回答这个问题。也许您可以将整个查询作为一个单独的问题发布,包括表结构、一些示例数据和所需的结果,并寻求帮助以使其更优化。对我来说,8表连接似乎有点高,除了一个与DW非常相关的明星连接。我不会说谎,现在是8。。。更好的办法是先提出一个观点,然后从那里出发吗?几乎没有足够的信息来回答这个问题。也许您可以将整个查询作为一个单独的问题发布,包括表结构、一些示例数据和所需的结果,并寻求帮助以使其更优化。8表连接对我来说似乎有点高,除了与DW相关的星形连接。