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

Динамично завъртане на редове в колони в Oracle

Oracle 11g предоставя PIVOT операция, която прави това, което искате.

Разтвор на Oracle 11g

select * from
(select id, k, v from _kv) 
pivot(max(v) for k in ('name', 'age', 'gender', 'status')

(Забележка:нямам копие на 11g, за да тествам това, така че не съм проверил неговата функционалност)

Получих това решение от:http://orafaq.com/wiki/PIVOT

РЕДАКТИРАНЕ – опция за центриране на xml (също Oracle 11g)
Очевидно има и pivot xml опция, когато не знаете всички възможни заглавия на колони, които може да са ви необходими. (вижте ТИП XML раздел в долната част на страницата, разположен на http://www.oracle.com/technetwork/articles/sql/11g-pivot-097235.html)

select * from
(select id, k, v from _kv) 
pivot xml (max(v)
for k in (any) )

(Забележка:Както преди нямам копие на 11g, за да тествам това, така че не съм проверил неговата функционалност)

Редактиране 2: Променено v в pivot и pivot xml оператори към max(v) тъй като се предполага, че трябва да бъде обобщен, както е посочено в един от коментарите. Добавих и in клауза, която не е по избор за pivot . Разбира се, трябва да посочите стойностите в in клаузата побеждава целта да има напълно динамична въртяща/кръстосана заявка, както беше желанието на плаката на този въпрос.



  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® Heterogeneous Services с два ODBC източника на данни

  2. 2 начина да получите минути от стойност на дата и час в базата данни на Oracle

  3. Поток за влизане в R12.2 и основно отстраняване на неизправности

  4. Какво е точно BLOB в контекста на СУБД

  5. Oracle:Има ли начин да получите скорошни грешки в синтаксиса на SQL?