PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Como incluir valores nulos na consulta `tablefunc` no postgresql?


Use o crosstab() variante com dois 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);

Assim, declarando explicitamente qual valor vai em qual coluna de saída. Então a função sabe onde preencher NULL valores. Neste caso generate_series() é útil para fornecer 8 linhas com os números de 1 a 8. Um VALUES expressão seria uma alternativa:
'VALUES (1), (2), (3), (4), (5), (6), (7), (8)'

Além disso, não se esqueça do ORDER BY cláusula na primeira consulta de parâmetro.

Forneci uma explicação detalhada nesta resposta relacionada .