2016-12-18 4 views
0

с использованием PostgreSQL 9.3 У меня есть таблица, которая показывает indivual разрешения, выданные через один год ниже:как выравниваться строки в столбцы в PostGreSQL

permit_typ| zipcode| address| name 
-------------+------+------+----- 
CONSTRUCTION  | 20004 | 124 fake streeet | billy joe 
SUPPLEMENTAL  | 20005 | 124 fake streeet | james oswald 
POST CARD   | 20005 | 124 fake streeet | who cares 
HOME OCCUPATION | 20007 | 124 fake streeet | who cares 
SHOP DRAWING  | 20009 | 124 fake streeet | who cares 

Я пытаюсь сгладить это так выглядит

CONSTRUCTION | SUPPLEMENTAL | POST CARD| HOME OCCUPATION | SHOP DRAWING | zipcode 
-------------+--------------+-----------+----------------+--------------+-------- 
1   | 2   | 3   | 5   | 6   | 20004 
1   | 2   | 3   | 5   | 6   | 20005 
1   | 2   | 3   | 5   | 6   | 20006 
1   | 2   | 3   | 5   | 6   | 20007 
1   | 2   | 3   | 5   | 6   | 20008 

пытались использовать Crosstab, но это немного выше моего ржавого SQL-опыта. у кого-нибудь есть идеи

ответ

1

Обычно я подхожу к этому типу запросов, используя условную агрегацию. В Postgres вы можете:

select zipcode, 
     sum((permit_typ = 'CONSTRUCTION')::int) as Construction, 
     sum((permit_typ = 'SUPPLEMENTAL')::int) as SUPPLEMENTAL, 
     . . . 
from t 
group by zipcode;