2017-01-11 6 views
0

私は次の形式を持っているMySQLでクエリを作成したいと思います:CASE文をSQLでどのように反復処理できますか?

SELECT *, 
    CASE 
     WHEN <column name> = 1 THEN 1 
     ELSE 0 
     END as "column_1", 
    CASE 
     WHEN <column name> = 2 THEN 1 
     ELSE 0 
     END as "column_2", 
    CASE 
     WHEN <column name> = 3 THEN 1 
     ELSE 0 
     END as "column_3" 
    FROM <table name>; 

私は例が多数(約千例)のために、このクエリを記述したいと思い、1000のに新しい列があるように、上記の条件を満たすように作成されます。上記のように手動で各行を記述する必要がないように、このプロセスをmySQLで反復処理するにはどうしたらよいですか(わずか3つのケースがあります)。

+0

ストアドプロシージャまたは外部のスクリプトプログラムで反復処理を行い、SQLを動的に記述します。書かれたら、動的に作成されたSQL文を実行します。 – JNevill

+0

上記のテキストを任意のスクリプト言語で生成すると、MySqlが行います。 – Serg

+0

トピックから少し外れています:ブール式は暗黙的に0または1に評価されます。つまり、「WHEN = 1 THEN 1 ELSE 0 END'」は単に「 = 1」に減らすことができます。また、フィールド名は通常、二重引用符ではなくバッククォートで囲まれています。 – shmosel

答えて

0

これは適切ではないかもしれませんが、あなたが(文字列としてではなく、複数の列など)の出力の1列と一緒に暮らすことができる場合は、次の操作を行うことができるかもしれない:

select t.id, 
     group_concat((case when t.column = v.value then '1' else '0' end) order by v.ordering) as string_flags 
from (select 1 as ordering, 1 as value union all 
     select 2, 2 union all 
     . . . 
    ) v cross join 
    t 
group by t.id; 

これは、ただのアイデア。パフォーマンスは問題ですが、行内の最大数の問題に関する問題も発生します。

関連する問題