2011-07-08 14 views
2

Iが値を持つテーブルを持っているキーに複数の条件または複数の行のために、分離しますカンマで区切ります。戻り列は

例: 代わりの

1 idx  here 
1 idx  there 

作品

1  idx  here, there 

クエリを返す必要があります。

DECLARE @commaSeperatedRes NVARCHAR(MAX);  
    SELECT @commaSeperatedRes = COALESCE(@commaSeperatedRes + ', ', '') + ColumnKey 
     FROM Table1 
    WHERE Table1.Key1= 1 AND Table1.Key2 = 'idx';   
    print @commaSeperatedRes 

問題はあるが、私は複数の行のためにこれを返す必要があります:

1 idx  here, there 
    2 idx where, why 


    DECLARE @commaSeperated NVARCHAR(MAX);  
    SELECT @commaSeperatedRes = COALESCE(@commaSeperated + ', ', '') + ColumnKey 
     FROM Table1 
    WHERE (Table1.Key1= 1 and Table1.Key2 = 'idx') 
     OR 
     (Table1.Key1 = 2 Table1.Key2 = 'idx') 

print @commaSeperatedRes 

また、これらの結果を一時テーブルに挿入して、値が他のテーブルのいくつかの列に追加されるようにします。理想的には、私はうまくいく私の一時テーブルは次のようになります。

TKey1  TKey2  TColumnKey 
    1  idx  here, there  
    2  idx  where, why 
+0

エイミー「IDX」はでない限り、私は、おそらく仕事ができる「作品クエリ」とは思いません非修飾カラム参照。 "idx"は文字列か列名であると思われますか?私のソリューションでは、Key2 = 'idx'のTable1の行だけを気にかけていると仮定しています。 –

+0

はい正しいです。 Typo、それはkey2 = 'idx'でなければなりません –

答えて

2
SELECT t1.Key1, t1.Key2, 
     STUFF((SELECT ', ' + ColumnKey 
        FROM Table1 t2 
        WHERE t2.Key1 = t1.Key1 
         AND t2.Key2 = t1.Key2 
        ORDER BY ColumnKey 
        FOR XML PATH('')),1,2,'') AS TColumnKey 
    FROM Table1 t1 
    GROUP BY t1.Key1, t1.Key2; 
+0

申し訳ありませんJoe、あなたは私の非常に似たようなバージョンを入力していました。 :-) –

+0

@アーロン:私はそんなに卑劣だ。 :-) –

0
DECLARE @t TABLE 
(
    Key1 INT, 
    Key2 VARCHAR(10), 
    ColumnKey VARCHAR(32) 
); 

INSERT @t SELECT 1, 'idx', 'here' 
UNION ALL SELECT 1, 'idx', 'there' 
UNION ALL SELECT 2, 'idx', 'where' 
UNION ALL SELECT 2, 'idx', 'why'; 

;WITH t AS 
(
    SELECT Key1, Key2 FROM @t -- put your real table here 
    WHERE Key2 = 'idx' 
    GROUP BY Key1, Key2 
) 
SELECT 
    TKey1 = t.Key1, 
    TKey2 = t.Key2, 
    TColumnKey = STUFF((SELECT ', ' + t2.ColumnKey 
    FROM @t -- put your real table here 
    AS t2 WHERE t2.Key1 = t.Key1 
    FOR XML PATH(''),TYPE).value('.','nvarchar(max)'),1,2,'') 
    FROM t;