sql >> Database >  >> RDS >> PostgreSQL

Hoe null-waarden op te nemen in de `tablefunc`-query in postgresql?

Gebruik de crosstab() variant met twee parameters :

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

Daarbij expliciet aangeven welke waarde in welke outputkolom komt. Dus de functie weet waar hij NULL moet invullen waarden. In dit geval generate_series() handig om 8 rijen te voorzien van de cijfers 1-8. Een VALUES uitdrukking zou een alternatief zijn:

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

Vergeet ook niet de ORDER BY clausule in de eerste parameterquery.

Ik heb een gedetailleerde uitleg gegeven in dit gerelateerde antwoord .



  1. Query om totale bestellingen te krijgen die vorig jaar door een specifieke klant zijn geplaatst, haalt herhaalde datums op wanneer er geen bestelling bestaat

  2. Hoe ' of een speciaal teken in bij gebruik van XMLELEMENT Oracle

  3. MySql, combineren datum- en tijdkolom in een tijdstempel

  4. Oracle-functie compileert met succes maar geeft een fout tijdens het uitvoeren van PLS-00221:is geen procedure of is niet gedefinieerd