Re: transposing data for a view

From: Arian Prins <prinsarian(at)zonnet(dot)nl>
To: H Jeremy Bockholt <jeremy(at)wundt(dot)psychiatry(dot)uiowa(dot)edu>
Subject: Re: transposing data for a view
Date: 2001-10-31 07:51:36
Message-ID: 3BDFAD88.6BB058DA@zonnet.nl
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-sql

H Jeremy Bockholt schreef:

> I have a generalized table:
>
> scanid | region | volume
> -------------------------
> 1 A 34.4
> 1 B 32.1
> 1 C 29.1
> 2 A 32.4
> 2 B 33.2
> 2 C 35.6
> .
> .
> .
>
> I want to create a flattened out view that looks like the following:
>
> scanid | A_volume | B_volume | C_volume
> ----------------------------------------
> 1 34.4 32.1 29.1
> 2 32.4 33.2 35.6
> .
> .
> .
>
> How do I correctly/efficiently construct a psql query to
> pivot/transpose the data? I am using postgreSQL version 7.0.x
>
> thanks,
> Jeremy

Try This:

select region, sum(a_volume) AS a_volume,
sum(b_volume) AS b_volume,
sum(c_volume) AS c_volume
from (
select
scanid,
volume AS a_volume,
0 AS b_volume,
0 AS c_volume
from mytable
where region = A
UNION
select
scanid,
0 AS a_volume,
volume AS b_volume,
0 AS c_volume
from mytable
where region = B
UNION
select
scanid,
0 AS a_volume,
0 AS b_volume,
volume AS c_volume
from mytable
where region = C
) tmp

(you might have to specifically typecast the zero's)

It would probably also be possible using CASE-statements. This is just
_one_ idea.

Arian.

In response to

Responses

Browse pgsql-sql by date

  From Date Subject
Next Message Stéphane Chomat 2001-10-31 09:06:22 Primary key with oid + name : error, which solution ?
Previous Message sharmad 2001-10-31 05:42:37 Re: postgresql error