PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Wie füge ich Nullwerte in die Abfrage "tablefunc" in Postgresql ein?

Verwenden Sie die crosstab() Variante mit zwei Parametern :

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

Dadurch wird explizit deklariert, welcher Wert in welche Ausgabespalte kommt. Die Funktion weiß also, wo NULL einzufügen ist Werte. In diesem Fall generate_series() bietet sich an, 8 Reihen mit den Zahlen 1-8 zu versehen. A VALUES Ausdruck wäre eine Alternative:

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

Vergessen Sie auch nicht den ORDER BY -Klausel in der ersten Parameterabfrage.

Ich habe eine detaillierte Erklärung in dieser zugehörigen Antwort bereitgestellt .