Hi,
When I saw cross tab, I realized that I'd done this before.
If you know what your keys are ahead of time, you can write the query.
Otherwise, you can write a program go generate the query by looking at the
distinct list of keys and generating code as follows. The code generator
would only have to replace the ?'s in "SUM(CASE KEY WHEN ? THEN VALUE ELSE 0
END) AS KEY?VAL".
SELECT INDEX AS T1_INDEX, SUM(CASE KEY WHEN 1 THEN VALUE ELSE 0 END) AS
KEY1VAL, SUM(CASE KEY WHEN 2 THEN VALUE ELSE 0 END) AS KEY2VAL, SUM(CASE KEY WHEN 3 THEN VALUE ELSE 0 END) AS KEY3VAL
FROM T1, T2
WHERE T1.INDEX = T2.IND
GROUP BY T1.INDEX ;
Henry
-----Original Message-----
From: Volker Paul [mailto:vpaul@dohle.com]
Sent: Friday, August 04, 2000 2:30 AM
To: Dana.Reed@clinicaldatacare.com
Cc: pgsql-sql@postgresql.org
Subject: Re: [SQL] SQL (table transposition)
Dana.Reed@clinicaldatacare.com wrote:
>
> Is there any way to get table T3 (below) from T1 and T2 using SQL (select,
view, etc)?
>
> T3 is basically all INDEX values from T1 matched to IND from T2 with the
corresponding KEY/VALUE pairs transposed from rows to columns.
>
> -------
> |INDEX| (T1)
> -------
> | 1 |
> | 2 |
> | 3 |
> -------
>
> -----------------
> |IND|KEY| VALUE | (T2)
> -----------------
> | 1 | 1 | val_a |
> | 1 | 2 | val_b |
> | 1 | 3 | val_c |
> | 2 | 1 | val_d |
> | 2 | 2 | val_e |
> | 3 | 1 | val_f |
> | 3 | 3 | val_g |
> -----------------
>
> ----------------------------------
> |T1_INDEX|KEY1VAL|KEY2VAL|KEY3VAL| (T3)
> ----------------------------------
> | 1 | val_a | val_b | val_c |
> | 2 | val_d | val_e | |
> | 3 | val_f | | val_g |
> ----------------------------------
>
I think what you are looking for is cross tabulation,
TRANSFORM statement, but I don't know if that
is supported by PostgreSQL.
Volker Paul