基本的に、列名をいくつかの制限付きで格納するテーブルとinfos
、それらの列の値を格納する別のテーブルがあります: info_data
。infos
からの列と からのデータを持つテーブルを取得したいinfo_data
。クロス集計機能を試してみましたが、期待した効果がありません。
私は2つのテーブルを持っています:
CREATE TABLE infos
(id serial PRIMARY KEY,
name text NOT NULL,
id_member integer NOT NULL,
title text,
min_length integer NOT NULL DEFAULT 0,
max_length integer NOT NULL DEFAULT 30,
required boolean NOT NULL DEFAULT false,
type text NOT NULL DEFAULT 'text'::text
);
CREATE INDEX info_id_idx ON infos (id);
と
CREATE TABLE info_data
(id serial PRIMARY KEY,
id_info integer,
value text,
CONSTRAINT info_data_id_info_fkey FOREIGN KEY (id_info)
REFERENCES infos (id) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION
);
CREATE INDEX info_data_id_idx ON info_data(id);
次の値を使用します。
情報:
COPY infos (id, name, id_member, title, min_length, max_length, required, type) FROM stdin;
1 nume 1 Nume 0 30 t text
2 prenume 1 Prenume 0 30 t text
3 cnp 1 C.N.P. 13 13 t number
4 nume anterior 1 Nume anterior 0 30 f text
5 stare civila 1 Starea civila 0 30 f text
6 cetatenie 1 Cetatenie 0 30 f text
7 rezidenta 1 Rezidenta 0 30 f text
9 tip act 1 C.I. / B.I. 0 10 t text
10 serie ci 1 Serie C.I. / B.I. 0 30 t text
11 numar ci 1 Numar C.I. / B.I. 0 30 t text
12 data eliberarii 1 Data eliberarii 0 30 t text
13 eliberat de 1 Eliberat de 0 30 t text
8 adresa 1 Adresa 0 50 f text
\.
情報データ:
COPY info_data (id, id_info, value) FROM stdin;
1 1 a
2 2 a
3 3 100
4 4
5 5
6 6
7 7
8 8
9 9 ci
10 10 sv
11 11 13
12 12 132
13 13 123
14 1 b
15 2 b
16 3 100
17 4
18 5
19 6
20 7
21 8
22 9 BI
23 10 XT
24 11 123
25 12 10
26 13 10
\.
質問: どうすればこの出力を達成できますか? infos
(テーブルからの一意のエントリに基づいて列を生成する必要があります
nume, prenume, cnp, nume anterior, ... (as columns - built from infos)
a , a, ...
b , b, ... (as rows - built from info_data)