PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Comment inclure des valeurs nulles dans la requête `tablefunc` dans postgresql ?

Utilisez le crosstab() variante avec deux paramètres :

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

Déclarant ainsi explicitement quelle valeur va dans quelle colonne de sortie. Ainsi, la fonction sait où remplir NULL valeurs. Dans ce cas generate_series() est pratique pour fournir 8 rangées avec les numéros 1-8. A VALUES expression serait une alternative :

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

N'oubliez pas non plus le ORDER BY clause dans la première requête de paramètre.

J'ai fourni une explication détaillée dans cette réponse connexe .