From: | Samuel Gendler <sgendler(at)ideasculptor(dot)com> |
---|---|
To: | Gabriel Filipiak <gabriel(dot)filipiak(at)gmail(dot)com> |
Cc: | pgsql-sql(at)postgresql(dot)org |
Subject: | Re: Problem with pivot tables |
Date: | 2011-11-06 21:26:01 |
Message-ID: | CAEV0TzCYbnu7VEfLQjBdsdddxVv1En9iwcpwWBZ-70tvO0L1tw@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-sql |
On Sun, Nov 6, 2011 at 9:06 AM, Gabriel Filipiak <gabriel(dot)filipiak(at)gmail(dot)com
> wrote:
> I have problem with creating a pivot table in postgreSQL using crosstab
> function. It works well but it produces many records for the same
> client_id, how can I avoid it?
>
> Here is the SQL:
>
> SELECT * FROM crosstab('SELECT client_id,extract(year from date),
> sum(amount) from orders group by extract(
> year from date), client_id','SELECT extract(year from date) FROM orders
> GROUP BY extract(year from date) order by extract(year from date)')
> AS orders(
> row_name integer,
> year_2001 text,
> year_2002 text,
> year_2003 text,
> year_2004 text,
> year_2005 text,
> year_2006 text,
> year_2007 text,
> year_2008 text,
> year_2009 text,
> year_2010 text,
> year_2011 text);
>
>
I think it assumes all client_id rows will occur together, so as soon as it
sees a different client_id, it moves to the next row. If it then
encounters the original client_id, it creates yet another row for it. Add
an order clause to your first query so that it will get all years for each
client_id sequentially.
From | Date | Subject | |
---|---|---|---|
Next Message | Manu T | 2011-11-07 07:18:30 | ORACLE PROCEDURE TO POSTGRES FUNCTION -ERROR IN THE OVER PART |
Previous Message | Gabriel Filipiak | 2011-11-06 17:06:32 | Problem with pivot tables |