Re: Table Pivot

Поиск
Список
Период
Сортировка
От Joe Conway
Тема Re: Table Pivot
Дата
Msg-id 3E4D0CD6.7040309@joeconway.com
обсуждение исходный текст
Ответ на Re: Table Pivot  (Christoph Haller <ch@rodos.fzk.de>)
Список pgsql-sql
Christoph Haller wrote:
> 
> I have an extended example using the 1) method implemented in plpgsql.
> Let me know if you want to have a look at it.
> 

If you're using 7.3.x, and don't mind a function based (vs pure sql 
based) approach, take a look at crosstab() in contrib/tablefunc.

It has a limitation in that the data source query must provide for 
"missing" rows. In other words, if your query produces:

id1    cat1    val
id1    cat2    val
id2    cat1    val
id2    cat2    val
id2    cat3    val

and you specify 3 catagory columns to the crosstab function, then 
crosstab() will not give the result you're probably expecting. I 
typically work around that by doing a sub-select that is the 
cross-product of (distinct id) and (distinct cat), and then left joining 
that to the actual data. That will produce somthing like:

id1    cat1    val
id1    cat2    val
id1    cat3    NULL
id2    cat1    val
id2    cat2    val
id2    cat3    val

For large numbers of rows and columns (at least with my data) I've found 
that crosstab() provides a significant performance boost.

HTH,

Joe



В списке pgsql-sql по дате отправления:

Предыдущее
От: Mintoo Lall
Дата:
Сообщение: Drop temporary table only if it exists
Следующее
От: Joe Conway
Дата:
Сообщение: Re: rownum