2017-11-02 19 views
3

私はテーブルを持っています。同様の例へのリンクを持つすべてのヘルプのPostgres:複数の行に単一の行を変換

--------------------------- 
| id | price_type | price | 
--------------------------- 
| 1 | type_a | 1234 | 
| 1 | type_b | 5678 | 
| 1 | type_c | 9012 | 
| 2 | type_a | 3456 | 
| 2 | type_b | 7890 | 
| 2 | type_c | 1234 | 
... 

Table_Name: price_list 
--------------------------------------------------- 
| id | price_type_a | price_type_b | price_type_c | 
--------------------------------------------------- 
| 1 | 1234  |  5678  |  9012  | 
| 2 | 3456  |  7890  |  1234  | 
| 3 | 5678  |  9012  |  3456  | 
--------------------------------------------------- 

私はこのような結果となりますPostgresの中に選択クエリを必要とします大いに感謝します。

+0

ちょうど '。SELECT ID、 ''、組合選択ID:

SELECT p.id, v.* FROM price_list p , LATERAL ( VALUES ('type_a', p.price_type_a) , ('type_b', p.price_type_b) , ('type_c', p.price_type_c) ) v (price_type, price); 

関連:VALUES式に参加するには、仕事をしていませんb'bと同様に '?.. –

+0

ありがとう!それは素晴らしいです..それは大量のデータに最適でしょうか? – skybunk

+0

ATMはとにかくスマートになります:) –

答えて

0

トライなめらかよう:

select id, 'type_a',type_a from price_list 
union all 
select id, 'type_b',type_b from price_list 
union all 
select id, 'type_c',type_c from price_list 
; 

更新 a_horse_with_no_nameが示唆するように、労働組合がここのために、DISTINCT値を選択する方法ですUNION ALLが好まれます - idがある場合は念のために(私は知りませんもちろんUNIQUE)

それが英国の場合 - は差

+0

'union all'はもっと良いでしょう –

+0

@a_horse_with_no_nameありがとう - 更新しました –

関連する問題