Search Postgresql Archives

Re: Question(s) about crosstab

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



O
n Tue, 2013-12-17 at 15:31 -0800, Ken Tanzer wrote:


> 
> \d unit_hold
>                  Table "public.unit_hold"
>         Column        |         Type          | Modifiers 
> ----------------------+-----------------------+-----------
>  grant_number_code    | character varying(10) | 
>  housing_project_code | character varying(10) | 
>  unit_type_code       | character varying(10) | 
>  count                | bigint                | 
> 
> 
> SELECT * FROM unit_hold limit 3;
>  grant_number_code | housing_project_code | unit_type_code | count 
> -------------------+----------------------+----------------+-------
>  1                 | AAAA                 | 4BR            |     1
>  1                 | BBBB                 | 1BR            |     1
>  1                 | CCCC                 | 1BR            |     1
> 
> 
> SELECT unit_type_code,description FROM l_unit_type;
>  unit_type_code | description 
> ----------------+-------------
>  5BR            | 5 Bedroom
>  4BR            | 4 Bedroom
>  3BR            | 3 Bedroom
>  6BR            | 6 Bedroom
>  UNKNOWN        | Unknown
>  GROUP          | Group Home
>  2BR            | 2 Bedroom
>  1BR            | 1 Bedroom
>  0BR            | Studio
>  SRO            | SRO
> 
> 
> 
> 
> I thought this would be a good candidate for crosstab.  After
> wrestling with the documentation, this is the best I could come up
> with:
> 
> 
> SELECT * FROM crosstab(
>   'SELECT housing_project_code||''_''||grant_number_code AS
> project_and_grant,grant_number_code,housing_project_code,unit_type_code,count FROM unit_hold ORDER BY 1,2',
>   'SELECT * FROM (SELECT DISTINCT unit_type_code FROM l_unit_type) foo
> ORDER BY unit_type_code ~ ''^[0-9]'' DESC, unit_type_code'
> ) AS ct(project_and_grant varchar, grant_number_code varchar,
> housing_project_code varchar, "0BR" bigint, "1BR" bigint, "2BR"
> bigint, "3BR" bigint, "4BR" bigint, "5BR" bigint, "6BR" bigint,"GROUP"
> bigint, "SRO" bigint, "UNKNOWN" bigint)
> 
> 
> 
> So here are my questions:
> 
> 
> 1)  Is there a simpler way?  I'm hoping I made this unnecessarily
> cumbersome and complicated.
> 2)  AFAICT, if a new unit type were to be added, I'd have to rewrite
> this query.  Is there any way to avoid that?
> 3)  It seems like everything after the first query, except for the
> category field, is redundant information, and that in theory you
> should be able to say crosstab('query','category_field').  Is there
> any inherent reason this simpler form couldn't work, or is it just
> that no one has wanted to do it, or gotten to it yet?
> 
> 
> Thanks in advance!
> 
> 
> Ken
> 
> 
> 
> 
> -- 
> 
> AGENCY Software  
> A data system that puts you in control
> 100% Free Software
> http://agency-software.org/
> ken.tanzer@xxxxxxxxxxxxxxxxxxx
> (253) 245-3801
> 
> 
> Subscribe to the mailing list to
> learn more about AGENCY or
> follow the discussion.


SELECT UH.grant_number_code, UH.housing_project_code, UH. count,
UT.description
FROM l_unit_type UT, unit_hold UH
WHERE UH.unit_type_code = UT.unit_type_code;

 
Easier to create a view.



-- 
Sent via pgsql-general mailing list (pgsql-general@xxxxxxxxxxxxxx)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]
  Powered by Linux