2012-02-07 22 views
0

コンマ区切りリストを作成しようとしていますが、私は派生テーブルを使用しています。しかし、私はLEFT OUTER JOIN内の変数を宣言することはできません...どうすればいいですか?SQL:派生テーブル内で変数を宣言するにはどうすればよいですか?

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

私はそれを試して、 "+ Name"を強調し、エラーを出します:条件が期待されるコンテキストで指定された非ブール型の式。 – daveomcd

+0

どのテーブルに「名前」列がありますか? – Tim

+0

名前はMyTableの一部です – daveomcd

2

変数は、実際にテーブル変数の内部で使用することができないので意味がありません。あなたの要件。そして、テーブル変数の後でそれを使用したいのであれば、それでも意味をなさない... Col1のそれぞれの別個の値に対して、変数の複数のインスタンスを一度期待するか?しかし、T8は一種の私に少し恐怖

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 

:たぶん、あなたはこれを意味しました。この結合にはすでにいくつのテーブルが含まれていますか?

+0

私はそれが8である瞬間に嘘をつきません...より良いことは、見解を作り、そこから行くことでしょうか? – daveomcd

+0

その質問に答えるための十分な情報がありません。たぶん、クエリ全体を、テーブル構造、サンプルデータ、および望ましい結果を含む別の質問として投稿し、より最適化するための助けを求めるならば。非常にDW関連のスター・ジョイント以外は、8テーブル・ジョイントが少し高いようです。 –

関連する問題