sql >> Base de Datos >  >> RDS >> PostgreSQL

¿Cómo incluir valores nulos en la consulta `tablefunc` en postgresql?

Use el crosstab() variante con dos parámetros :

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);

Declarando así explícitamente qué valor va en qué columna de salida. Entonces la función sabe dónde completar NULL valores. En este caso generate_series() resulta útil para proporcionar 8 filas con los números del 1 al 8. Un VALUES expresión sería una alternativa:

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

Además, no olvide el ORDER BY cláusula en la consulta del primer parámetro.

Proporcioné una explicación detallada en esta respuesta relacionada .