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

Как мога да напиша SQL в Oracle в моя случай?

Трябва да използвате стандартния PIVOT заявка.

В зависимост от вашата версия на базата данни Oracle , можете да го направите по два начина:

Използване на PIVOT заверсия 11g и нагоре:

SQL> SELECT *
  2  FROM
  3    (SELECT c.place place,
  4      row_number() OVER(PARTITION BY c.place ORDER BY NULL) cnt,
  5      (row_number() OVER(PARTITION BY c.place ORDER BY NULL)/
  6      COUNT(place) OVER(ORDER BY NULL))*100 pct
  7    FROM person_injuryPlace_map A
  8    JOIN person b
  9    ON(A.person_id = b.ID)
 10    JOIN injury_place c
 11    ON(A.injury_id = c.ID)
 12    ORDER BY c.place
 13    ) PIVOT (MAX(cnt),
 14             MAX(pct) pct
 15             FOR (place) IN ('kitchen' AS kitchen,
 16                             'Washroom' AS Washroom,
 17                             'Rooftop' AS Rooftop,
 18                             'Garden' AS Garden));

   KITCHEN KITCHEN_PCT   WASHROOM WASHROOM_PCT    ROOFTOP ROOFTOP_PCT     GARDEN GARDEN_PCT
---------- ----------- ---------- ------------ ---------- ----------- ---------- ----------
         1  14.2857143          3   42.8571429          1  14.2857143          2 28.5714286

Използва се MAX и ДЕКОДИРАНЕ заверсия 10g и преди:

SQL> SELECT MAX(DECODE(t.place,'kitchen',cnt)) Kitchen ,
  2    MAX(DECODE(t.place,'kitchen',pct)) Pct ,
  3    MAX(DECODE(t.place,'Washroom',cnt)) Washroom ,
  4    MAX(DECODE(t.place,'Washroom',pct)) Pct ,
  5    MAX(DECODE(t.place,'Rooftop',cnt)) Rooftop ,
  6    MAX(DECODE(t.place,'Rooftop',pct)) Pct ,
  7    MAX(DECODE(t.place,'Garden',cnt)) Garden ,
  8    MAX(DECODE(t.place,'Garden',pct)) Pct
  9  FROM
 10    (SELECT b.ID bid,
 11      b.NAME NAME,
 12      c.ID cid,
 13      c.place place,
 14      row_number() OVER(PARTITION BY c.place ORDER BY NULL) cnt,
 15      ROUND((row_number() OVER(PARTITION BY c.place ORDER BY NULL)/
 16      COUNT(place) OVER(ORDER BY NULL))*100, 2) pct
 17    FROM person_injuryPlace_map A
 18    JOIN person b
 19    ON(A.person_id = b.ID)
 20    JOIN injury_place c
 21    ON(A.injury_id = c.ID)
 22    ORDER BY c.place
 23    ) t;

   KITCHEN        PCT   WASHROOM        PCT    ROOFTOP        PCT     GARDEN        PCT
---------- ---------- ---------- ---------- ---------- ---------- ---------- ----------
         1      14.29          3      42.86          1      14.29          2      28.57


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Актуализиране на таблицата на Oracle от макрос на Excel VBA с помощта на ODBC връзка

  2. ODP.NET Oracle.ManagedDataAccess причинява края на мрежовата сесия ORA-12537 на файла

  3. ВЪНШЕН КЛЮЧ ПРИ ОГРАНИЧЕНИЕ НА ИЗТРИВАНЕ Грешка - Oracle

  4. Как да изпълните PL SQL блок в Oracle

  5. Създаване на тригер, който да се изпълнява само когато се създава нова таблица