2011-12-09 11 views
0

ここに私の状況ではうまくいかなかったたくさんのフォーラムがありました。私は以下の結果と新しい列を返すselect文を作成する必要があり値に基づいて列をグループ化し、1つの値に連結しますか?

 
Col_1, Col_2, Col_3, Col_n 
TRUE  FALSE  FALSE FALSE 
FALSE TRUE  TRUE  FALSE 
TRUE  FALSE  FALSE TRUE 

があります。つまり

 
New_Column 
Col_1 
Col_2, Col_3 
Col_1, Col_n 

を、カラムがTrueであれば、その後に列名を追加します私の新しいコラムだから私の結果セットが次のようになります。

myID, myName, myDesc, Col_1, Col_2, Col_3, Col_n, New_Column

私が試した:

SELECT 
    myID, 
    myName, 
    myDesc, 
    ((CASE WHEN col_1 = 'TRUE' THEN 'col_1' END) + ', ' + (CASE WHEN col_2 = 'TRUE' THEN 'col_2' END) + ', ' + (CASE WHEN col_3 = 'TRUE' THEN 'col_3' END) + ', ' + (CASE WHEN col_n = 'TRUE' THEN 'col_n' END)) as New_Column 
FROM myTable 

しかし、結果セットが間違っていました。私に与えられたデザインで必要な結果セットを得るにはどうすればよいですか?

私は結果は私が次のことを意味間違っていると言う:

myID, myName, myDesc, Col_1, Col_2, Col_3, Col_n, New_Column
Data, Data, TRUE, False, false, true, Null
Data, Data, false, Col_2, Col_3, false, Null
Data, Data, Col_1, Null, Null, Col_n, Col_1Col_2Col_3Col_n

これは私が期待するものである:

myID, myName, myDesc, Col_1, Col_2, Col_3, Col_n, New_Column
Data, data, Col_1, Col_2, NULL, Col_N, Col_1Col_2Col_N
+0

どのように間違っていますか? –

+0

何を得ましたか? – muratgu

+0

...まず、条件付きではないので、彼女はおそらく好きな数よりも多くのコンマを得るつもりです... MySQLでは、 'group_concat'は動作しますが、MS-SQLでは動作しないと思いますサーバ。 – BRFennPocock

答えて

0

私の推測では、あなたがNULLの結果を取得しているということです列がFALSEの場合は、各CASE句がNULLを戻すためです。

BEGIN TRAN 
CREATE TABLE MyTable (col_1 VARCHAR(5), 
         col_2 VARCHAR(5), 
         col_3 VARCHAR (5), 
         col_n VARCHAR(5) 
         ) 
INSERT INTO MyTable 
SELECT 'TRUE', 'FALSE', 'TRUE', 'TRUE'      
UNION ALL 
SELECT 'FALSE', 'FALSE', 'FALSE', 'FALSE'       


SELECT STUFF((CASE WHEN col_1 = 'TRUE' THEN ',col_1' 
        ELSE '' 
       END) + (CASE WHEN col_2 = 'TRUE' THEN ',col_2' 
           ELSE '' 
          END) + (CASE WHEN col_3 = 'TRUE' THEN ',col_3' 
             ELSE '' 
            END) 
       + (CASE WHEN col_n = 'TRUE' THEN ',col_n' 
         ELSE '' 
        END), 1, 1, '') AS New_Column 
FROM myTable 

ROLLBACK 
関連する問題