sql >> Database >  >> RDS >> PostgreSQL

Draai-/kruistabel met meer dan één waardekolom

Een manier zou zijn om een ​​samengesteld type te gebruiken:

CREATE TYPE i2 AS (a int, b int);

Of, voor ad-hoc gebruik (registreert het type voor de duur van de sessie):

CREATE TEMP TABLE i2 (a int, b int);

Voer vervolgens de kruistabel uit zoals u die kent en ontbind het samengestelde type:

SELECT client_id
     , (a0).a AS a0_cur_val, (a0).b AS a0_fut_val
     , (a1).a AS a1_cur_val, (a1).b AS a1_fut_val
     , (a2).a AS a2_cur_val, (a2).b AS a2_fut_val
FROM   crosstab(
       'SELECT client_id, asset_type, (current_value, future_value)::i2
        FROM   foo
        ORDER  BY 1,2'

      ,'SELECT * FROM generate_series(0,2)'
   ) AS ct (client_id int, a0 i2, a1 i2, a2 i2);

Alle haakjes zijn vereist !

Basisprincipes voor crosstab() :




  1. Wat is een goede benadering voor het beheren van de db-verbinding in een Google Cloud SQL (GAE) Python-app?

  2. SQL:rijen selecteren die een bepaalde waarde hebben

  3. Krijg kolomnamen en waarden in for loop PHP

  4. Fout bij instellen van databaseconfiguratie-eigenschap voor IDatabaseConnection (HSQLDB)