sql >> Databáze >  >> RDS >> PostgreSQL

Jak zahrnout hodnoty null do dotazu `tablefunc` v postgresql?

Použijte crosstab() varianta se dvěma parametry :

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

Tím je explicitně deklarováno, která hodnota se nachází ve kterém výstupním sloupci. Funkce tedy ví, kam má vyplnit NULL hodnoty. V tomto případě generate_series() přijde vhod poskytnout 8 řádků s čísly 1-8. A VALUES výraz by byl alternativou:

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

Nezapomeňte také na ORDER BY klauzule v prvním parametrickém dotazu.

V této související odpovědi jsem poskytl podrobné vysvětlení .



  1. Jak propojit Struts 2 s Hibernate a PostgreSQL

  2. Korupce MS Access, část 2:Nejlepší postupy pro prevenci a obnovu

  3. Získávání dat z databáze Oracle jako soubor CSV (nebo jakýkoli jiný vlastní textový formát)

  4. Používejte relační databáze MySQL na Fedoře 13