2014-06-24 2 views
4

상상하는 난 내부 필드 데이터 테이블 차를 가지고hstore 데이터에서 피벗 테이블을 만드는 방법은 무엇입니까?

CROSSTAB 
name | doors | engine | air_conditioning 
car 1 | 5  | 1.1  | 
car 2 | 3  | 1.1  | "true" 
car 3 | 5  | 1.4  | 
:

CARS 
name | data 
car 1 | { "doors" => "5", "engine" => "1.1" } 
car 2 | { "doors" => "3", "engine" => "1.1", "air_conditioning" => "true" } 
car 3 | { "doors" => "5", "engine" => "1.4" } 

가정 데이터 키는이 같은 데이터에서 피봇 테이블을 만드는 방법 (더 첨가 할 수 있음) 동적

답변

0

다음은 요청 결과를 얻을하는 방법 :이 표에 발생합니다

CREATE TABLE hstore_test (id bigserial primary key, title text, doors integer, engine text, air_conditioning boolean) 
INSERT INTO hstore_test (title, doors, engine, air_conditioning) 
VALUES ('Car1', 2, '1.1', false), ('Car2', 4, '1.2', true), ('Car3', 3, '1.3', false), ('Car4', 5, '1.4', null); 

DROP TABLE IF EXISTS hstore_persist; 
CREATE TABLE hstore_persist AS 
SELECT hstore(t) car_data FROM hstore_test AS t; 

SELECT car_data->'title' "name", car_data->'doors' doors, car_data->'engine' engine, car_data->'air_conditioning' air_conditioning 
FROM hstore_persist 

name | doors | engine | air_conditioning 
Car1 |  2 | 1.1 | f 
Car2 |  4 | 1.2 | t 
Car3 |  3 | 1.3 | f 
Car4 |  5 | 1.4 | 

"크로스 탭"은 없습니다. 이것은 hstore의 액세서 메소드를 사용하여 예제에 표시된 방식으로 데이터를 표시하는 것입니다.

관련 문제