--------Name--------aaaabbbbccccdddd--------
이 출력을 아래처럼 바꿀수 잇을까요? 조언 부탁드립니다.
--------------------------------N1 N2 N3 N4 --------------------------------aaaa bbbb cccc dddd--------------------------------
이문제는 크로스테이블(cross table) 개념으로 푸는 것이 가장 합리적일 것 같습니다.
이 문제를 설명하기위해서는 자료구조를 약간 바꾸겠습니다. (그래야 설명이 가능하니까)
원천 자료는 다음과 같습니다.
mydb=# create table t (ymd date, ntype text, name text) without oids; CREATE TABLE mydb=# select * from t order by 1,2; ymd | ntype | name ------------+-------+------ 2004-01-19 | N1 | aaaa 2004-01-19 | N2 | bbbb 2004-01-19 | N3 | cccc 2004-01-19 | N4 | dddd 2004-01-20 | N1 | eeee 2004-01-20 | N2 | ffff 2004-01-20 | N3 | gggg 2004-01-20 | N4 | hhhh (8 rows) mydb=# select ymd,f1,f2,f3,f4 from crosstab('select * from t order by 1,2',4) as ct (ymd date, f1 text, f2 text, f3 text, f4 text); ymd | f1 | f2 | f3 | f4 ------------+------+------+------+------ 2004-01-19 | aaaa | bbbb | cccc | dddd 2004-01-20 | eeee | ffff | gggg | hhhh (2 rows)
이렇게 풀어가는 것이 가장 합리적이겠지요.
crosstable 기능을 사용하려면, contrib/tablefunc 모듈을 설치하셔야합니다. 또한 7.3.x 이상 버전에서만 가능합니다.
자세한 것은 소스 디렉토리 안에 있는 contrib/tablefunc/README.tablefunc 문서를 참조하세요. 비교적 자세히 설명된 문서니 도움이 많이 되실겝니다.
이 방법 말고는 7.3.x 이하 버전에서는 inline view 기능을 이용하셔야할터인데, 이 방법은 부득이, 마지 못해서 사용하는 방법이지 그리 권장할 만한 방법이 아닙니다.
상기님 감사합니다.
덕분에 많은 도움이 되었습니다. :-)
날추운데 감기 조심하시길.. :-)