2016-12-19 8 views
3

私は2つのカラムidとdataを持つ1つのテーブルを持っています。表中の値は以下の通りである。ポストグルの分割カラムの値

id|data| 
1 |A,B | 
2 |B,C | 
3 |C,D | 
4 |D,A | 
5 |E,C | 

表中に存在するA、B、C、D、Eの数が必要である。ご注意:列は、彼らがテーブルからのデータ列の値に依存する動的な手段です:

A|B|C|D|E| 
2|2|3|2|1| 

そして、私は次のクエリを書かれている次のように

SELECT id,s.data 
FROM my_table t, 
     unnest(string_to_array(t.data, ',')) s(data); 

出力が与えられます。

id|data| 
1 | A | 
1 | A | 
1 | A | 
1 | A | 
1 | A | 
1 | A | 
1 | A | 
1 | A | 
+7

この「SQL体操」が必要でないように、おそらくあなたのスキーマを再設計すべきであると言及する必要はないと思います:-)あなたが*自分自身がサブ列を処理しようとしているおそらくそれは間違っているでしょう。 – paxdiablo

+1

これで時間を無駄にしないでください。 – e4c5

+0

はデータ列の2つの値が固定されていますか? –

答えて

0

正確な出力が得られるクエリを見つけてください。

select * from crosstab ('SELECT ''Total'':: text, s.data, count(*)::int 
FROM my_table t, unnest(string_to_array(t.data, '','')) s(data) 
group by s.data') as ct(Total text, A int, B int, C int, D int, E int) 

(作成されていない場合は)拡張tablefuncを作成してください。