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

Použijte hodnoty řádků jako sloupce v PostgreSQL

A crosstab() dotaz pro váš příklad by vypadal takto:

Chcete-li vyplnit 0 pro výslednou hodnotu NULL hodnoty (požadavek v komentáři), použijte COALESCE() :

SELECT brand_id
     , COALESCE(jan, 0) AS "Jan-2012"
     , COALESCE(feb, 0) AS "Feb-2012"
     , COALESCE(mar, 0) AS "Mar-2012"
     , COALESCE(apr, 0) AS "Apr-2012"
FROM crosstab(
       'SELECT brand_id, month, total
        FROM   brands
        ORDER  BY 1'

       ,$$VALUES ('Jan-2012'::text), ('Feb-2012'), ('Mar-2012'), ('Apr-2012')$$
 ) AS ct (
   brand_id int
 , jan numeric    -- use actual data type!
 , feb numeric
 , mar numeric
 , apr numeric);

Podrobné vysvětlení a odkazy v této související odpovědi:
PostgreSQL Crosstab Dotaz

Stranou:nepoužívejte vyhrazené slovo „datum“ jako název sloupce a neměli byste ani používat, i když to Postgres umožňuje.




  1. Získejte typ specifikace char z pole MySQLi

  2. Mysql vyhledá řetězec a číslo pomocí MATCH() AGAINST()

  3. SAS/Připojte se k Oracle pomocí rsubmit

  4. vytváření dynamického dotazu v mysql a golang