Re: Cross-Tab queries in postgres?

Поиск
Список
Период
Сортировка
От Joe Conway
Тема Re: Cross-Tab queries in postgres?
Дата
Msg-id 3D3BAFB6.8090205@joeconway.com
обсуждение исходный текст
Ответ на Cross-Tab queries in postgres?  (Martijn van Oosterhout <kleptog@svana.org>)
Ответы temp tables for more than one connection  ("Jan Hartmann" <jhart@frw.uva.nl>)
Список pgsql-general
Martijn van Oosterhout wrote:
> I know they're not supported and that they should be done in the
> presentation end of the software. However, I have a case where I need to use
> the result as the input to another query. So I'm reading the output, doing
> the cross-tab and copying the result back into the database.
>

Funny you should ask about this today. See my post to patches from
yesterday:

http://archives.postgresql.org/pgsql-patches/2002-07/msg00247.php

specifically:

crosstabN(text sql)
    - returns a set of row_name plus N category value columns
    - crosstab2(), crosstab3(), and crosstab4() are defined for you,
      but you can create additional crosstab functions per directions
      in the README.

crosstabN example usage
test=# select * from ct where rowclass = 'group1' and (attribute =
'att2' or attribute = 'att3');
  id | rowclass | rowid | attribute | value
----+----------+-------+-----------+-------
   2 | group1   | test1 | att2      | val2
   3 | group1   | test1 | att3      | val3
   6 | group1   | test2 | att2      | val6
   7 | group1   | test2 | att3      | val7
(4 rows)

select * from crosstab3(
    'select rowid, attribute, value
     from ct
     where rowclass = ''group1''
     and (attribute = ''att2'' or attribute = ''att3'') order by 1,2;');

   row_name | category_1 | category_2 | category_3
----------+------------+------------+------------
   test1    | val2       | val3       |
   test2    | val6       | val7       |
(2 rows)

and a follow-up at:
http://archives.postgresql.org/pgsql-patches/2002-07/msg00250.php

If you want to try it get an update from cvs and apply the three patches
(well, one is just a doc patch) from the *second* post.

This is not exactly what you have described, but pretty close. Take a
look at the README. I think it currently is not as flexible as your
example would need, but could be reasonably easily modified.

> Anyway, it doesn't seem to hard to implement so I was wondering if any other
> database systems actually implement it. Mostly I'm interested in what syntax
> they use to indicate such a query. (I presume it's not in the standard or
> it'd be there already).

I haven't seen this except in MS Access. I don't think you can directly
produce a crosstab in MS SQL Server or Oracle, although in Oracle you
can build your own table function.



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

Предыдущее
От: Martijn van Oosterhout
Дата:
Сообщение: Cross-Tab queries in postgres?
Следующее
От: Alessandro Baretta
Дата:
Сообщение: Re: Memory usage question