私はブール型の複数の列を持つテーブルを含むレガシーデータベースを持っています。例えば:列名を複数行に変換するにはどうすればよいですか?
TABLE_1
id name has_lights has_engine has_brakes has_tyres can_move
1 bullock_cart false false false true true
2 car true true true true true
3 tank true true true false true
私は表1のIDと名前と真である(列の名前によって表される)の属性を取得するためのSQLクエリを記述したいと思います。
予想される出力:
SELECT id, name,
CASE
WHEN has_lights THEN 'has_lights'
WHEN has_engine THEN 'has_engine'
WHEN has_brakes THEN 'has_brakes'
WHEN has_tyres THEN 'has_tyres'
WHEN can_move THEN 'can_move'
END
FROM TABLE1;
をしかし、これは私に(CASE-WHENのおかげで)表1の各行のための唯一の第一マッチング属性を取得します。
id name attributes
-- ---- ----------
1 bullock_cart has_tyres
1 bullock_cart can_move
2 car has_lights
2 car has_engine
2 car has_brakes
2 car has_tyres
2 car can_move
3 tank has_lights
3 tank has_engine
3 tank has_brakes
3 tank can_move
私は書いています。
私が望む形式でデータを取得する正しい方法は何ですか?任意の入力/ヘルプは非常に高く評価されますか?
注:
- テーブル構造が理想的ではないが、これは、レガシーシステムであり、我々は、スキーマを変更することはできません。
- ネストされたクエリは、あまりにも遅くない限り、okです - 上記のサンプル(私は、低速で一致する行数/列係数を理解しています)。