私はこのようなテーブルを持っています:
id | P | C | A | B
--------------------
1 |100 |3 |a1 | b1
2 |101 |3 |a2 | b2
3 |102 |3 |a3 | b3
4 |103 |3 |a4 | b4
5 |100 |4 |a5 | b5
6 |101 |4 |a6 | b6
7 |102 |4 |a7 | b7
8 |103 |4 |a8 | b8
次のような新しい転置構造を取得したいと思います。
P |_3A | _3B |_4A | _4B
-------------------------
100 | a1 | b1 | a5 | b5
101 | a2 | b2 | a6 | b6
102 | a3 | b3 | a7 | b7
103 | a4 | b4 | a8 | b8
ご覧のとおり、元のテーブルのCフィールドから新しいフィールド名が抽出されています。SQLを使用してこれを行う方法はありますか?
Postgresには、配列との点でいくつかの高度な機能がありますcrosstab
。ただし、これを行うデータベースに依存しない方法は、集計を使用することです。
select t.p,
max(case when c = 3 then a end) as a3,
max(case when c = 3 then b end) as b3,
max(case when c = 4 then a end) as a4,
max(case when c = 4 then b end) as b4
from atable t
group by t.p;
これは、SQLiteとPostgresの両方(および他のほぼすべてのデータベース)で機能します。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加