PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Come includere valori null nella query `tablefunc` in postgresql?

Usa crosstab() variante con due parametri :

SELECT * FROM crosstab(
   'SELECT zone_id, group_id, area
    FROM   ct
    ORDER  BY 1,2'

   ,'SELECT g FROM generate_series(1,8) g'  -- ! Provide values explicitly
   )
AS ct(
     row_name integer
   , g_1 float8, g_2 float8
   , g_3 float8, g_4 float8
   , g_5 float8, g_6 float8
   , g_7 float8, g_8 float8);

Dichiarando così in modo esplicito quale valore va in quale colonna di output. Quindi la funzione sa dove inserire NULL i valori. In questo caso generate_series() è utile per fornire 8 righe con i numeri 1-8. Un VALUES l'espressione sarebbe un'alternativa:

'VALUES (1), (2), (3), (4), (5), (6), (7), (8)'

Inoltre, non dimenticare il ORDER BY clausola nella prima query di parametro.

Ho fornito una spiegazione dettagliata in questa risposta correlata .