2017-05-11 1 views
0

例えば、私はこのテーブルを持っている:1つの選択クエリを使用して再構成されたテーブルを返す方法

+------+--------+-------+--------+-------+ 
| name | length | width | status | side | 
+------+--------+-------+--------+-------+ 
| T1 | 5  | 2  | DONE | Left | 
+------+--------+-------+--------+-------+ 
| T1 | 2  | 1  | DONE | Right | 
+------+--------+-------+--------+-------+ 

しかし、返すために1つの選択クエリを必要とする:

+------+-------------+------------+-------------+--------------+-------------+--------------+ 
| name | left_length | left_width | left_status | right_length | right_width | right_status | 
+------+-------------+------------+-------------+--------------+-------------+--------------+ 
| T1 | 5   | 2   | DONE  | 2   | 1   | DONE   | 
+------+-------------+------------+-------------+--------------+-------------+--------------+ 

この種の操作は何と呼ばれますか? 私はPostgresを使用しています。ここで

+2

あなたは答えに提供条件付き集約ソリューションを使用することができ、またはあなたがtablefuncモジュールをインストールして、ここで説明したように、クロス集計関数を使用することができます。 http://stackoverflow.com/questions/3002499/postgresql-crosstab-query – cha

+0

用語をありがとう。私は何をルックアップするか分からなかった。私は今読むべきことがたくさんあることがわかります! –

答えて

1

は、条件付きの集約を使用してそれを行うための一つの方法です:

select name, 
    max(case when side = 'Left' then length end) as left_length, 
    max(case when side = 'Left' then width end) as left_width, 
    max(case when side = 'Left' then status end) as left_status, 
    max(case when side = 'Right' then length end) as right_length, 
    max(case when side = 'Right' then width end) as right_width, 
    max(case when side = 'Right' then status end) as right_status 
from your_table 
group by name; 
関連する問題