Re: Transposing data

From: Alexander Dederer <dederer(at)spb(dot)cityline(dot)ru>
To: pgsql-sql(at)postgresql(dot)org
Subject: Re: Transposing data
Date: 2001-05-21 06:39:19
Message-ID: 9ead2o$1rd7$1@news.tht.net
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-sql

Hans-J?rgen Sch?nig wrote:

> I want the values in column label to be displayed in the a-axis. Is
> there an easy way to transform the data:
> Here is the input data:
> age_code | label | count
> ----------+-------+-------
> age_1 | 30k | 1
> age_1 | 50k | 2
> age_1 | more | 2
> age_2 | 40k | 2
> age_3 | 40k | 1
>
> I want the result to be:
>
> age_code | 30k | 40k | 50k | more
> -----------------------
> age_1 | 1 | | 2 | 1
> age_2 | | 2 |
> age_3 | | 1 | |
>
> Is there any easy way to do the job or do I have to write a PL/pgSQL
> function?

Got it:
# SELECT * FROM aaa;
age_code | label | count
----------+-------+-------
age_1 | 30k | 1
age_1 | 50k | 2
age_1 | more | 2
age_2 | 40k | 2
age_3 | 40k | 1

-------
SELECT
s0.age_code,
(SELECT count FROM aaa s1 WHERE s1.age_code = s0.age_code AND s1.label =
'30k') as "30k",
(SELECT count FROM aaa s1 WHERE s1.age_code = s0.age_code AND s1.label =
'40k') as "40k",
(SELECT count FROM aaa s1 WHERE s1.age_code = s0.age_code AND s1.label =
'50k') as "50k",
(SELECT count FROM aaa s1 WHERE s1.age_code = s0.age_code AND s1.label =
'more') as "more"
FROM aaa s0
GROUP BY s0.age_code;

age_code | 30k | 40k | 50k | more
----------+-----+-----+-----+------
age_1 | 1 | | 2 | 2
age_2 | | 2 | |
age_3 | | 1 | |
(3 rows)

Alexander Dederer.

In response to

Responses

Browse pgsql-sql by date

  From Date Subject
Next Message Hans-Jürgen Schönig 2001-05-21 07:23:06 Re: Transposing data
Previous Message Tod McQuillin 2001-05-21 05:37:48 Re: [SQL] problem while starting server ???