PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Използвайте стойностите на редовете като колони в PostgreSQL

crosstab() заявката за вашия пример ще изглежда така:

За да попълните 0 за резултат NULL стойности (заявка в коментар), използвайте 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);

Подробно обяснение и връзки в този свързан отговор:
PostgreSQL Crosstab Заявка

Настрана:не използвайте запазената дума "date" като име на колона и вие също не трябва, дори ако Postgres го позволява.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как мога да вмъкна общи данни във временна таблица от различни схеми?

  2. Намиране на комбинации от конкретни стойности

  3. стойността е твърде дълга за тип символ варира (N)

  4. Създайте списък с всички дни в месеца и разпределете стойността поравно за всеки ден

  5. Заключване за четене на ред на PostgreSQL