Re: dynamic crosstab

From: "Masse Jacques" <jacques(dot)masse(at)bordeaux(dot)cemagref(dot)fr>
To: "SunWuKung" <Balazs(dot)Klein(at)t-online(dot)hu>, <pgsql-general(at)postgresql(dot)org>
Subject: Re: dynamic crosstab
Date: 2008-02-13 09:19:51
Message-ID: 182D8C7FAD4DCE499BF5AD749B3AA064287251@hermes.bordeaux.cemagref.fr
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general


>
> I found this to create dynamic crosstabs (where the resulting
> columns are not known beforehand):
> http://www.ledscripts.com/tech/article/view/5.html
> (Thanks for Denis Bitouzé on
> http://www.postgresonline.com/journal/index.php?/archives/14-C
> rossTab-Queries-in-PostgreSQL-using-tablefunc-contrib.html
> for pointing it out.).
> This is basically dynamically generating an SQL string with CASE ...
> WHEN that will create a view.
> This could work although for hundreds of columns it looks a
> bit scary for me.
> Isn't there a more elegant way to achieve this with tablefunc
> crosstab and if there isn't don't you think it could/should be there?
> There is a syntax where you could specify the columns with a
> SELECT DISTINCT statement - couldn't it also generate the
> enumeration string eg. presuming that all returning colums
> are stored as text?
> Or if that is not possible instead of the enumeration part
> wouldn't it be better to put a name of the view that could be
> created/recreated?
>
> I know that most db people don't care much about
> pivot/crosstab in the db but imagine this situation:
> I am storing questionnaire results on people. Since the
> questionnaires are created by users I have no other way than
> using an EAV model like personID, questionID, responseValue
> to store responses. Now this table gets long 300 question per
> questionnaire, 3000 people and we have 1m row. Now whenever I
> need to download this data in my case 2/3rd of it would be
> redundant if I could pivot it first - and in a 20MB csv its
> significant (I know its a tradeoff between processing and storage).
> Moreover my users can't do anything with this dataformat -
> they need to pivot it offline anyway, which is not easy
> (Excel cant do it, Access cant do it, numberGo cant do it for
> different reasons).
> Although the application could do it I think this is a
> generic functionality that the database is more suited for.
>
> Please let me know if you know of a good db based way to
> create a dynamic crosstab in Postgres - or why there shouldn't be one.
> Thanks and regards.
> SWK

Have you tried this crosstab?

http://www.postgresql.org/docs/8.3/interactive/tablefunc.html

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Willy-Bas Loos 2008-02-13 09:22:29 show time consumed by query in psql
Previous Message Koen Vermeer 2008-02-13 09:19:14 Re: Storing images as BYTEA or large objects