sql >> Databáze >  >> RDS >> Oracle

Dynamické otáčení řádků do sloupců v Oracle

Oracle 11g poskytuje PIVOT operace, která dělá to, co chcete.

11g roztok Oracle

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

(Poznámka:Nemám kopii 11g, na které bych to mohl vyzkoušet, takže jsem neověřil jeho funkčnost)

Toto řešení jsem získal z:http://orafaq.com/wiki/PIVOT

UPRAVIT – možnost pivot xml (také Oracle 11g)
Zřejmě existuje také pivot xml možnost, když neznáte všechna možná záhlaví sloupců, která byste mohli potřebovat. (viz TYP XML sekce v dolní části stránky na adrese 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) )

(Poznámka:Stejně jako předtím nemám kopii 11g k testování, takže jsem neověřil jeho funkčnost)

Úprava2: Změněno in v pivot a pivot xml příkazy na max(v) protože to má být agregováno, jak je uvedeno v jednom z komentářů. Také jsem přidal in klauzule, která není volitelná pro pivot . Samozřejmě je nutné zadat hodnoty v in klauzule maří cíl mít zcela dynamický pivot/konverzní dotaz, jak bylo přáním plakátu této otázky.



  1. Operátoři T-SQL SET Část 2:INTERSECT a EXCEPT

  2. Závažná chyba:operátor [] není pro řetězce podporován

  3. Chyba Postgres na insertu - CHYBA:neplatná sekvence bajtů pro kódování UTF8:0x00

  4. SQL Pivot – Vědět, jak převést řádky na sloupce