Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Unpivot pada tampilan tidak berfungsi di Oracle

Seperti yang sudah Aleksej katakan - itu tidak akan bekerja pada versi server Oracle <11g.

Jadi, inilah pendekatan lama dan sedikit "jahat"...

select key, c1, c2, c3 from t order by key ;

KEY C1    C2    C3
--- ----- ----- -----
r1  v1    v2    v3
r2  v1    v2
r3  v1          v3
r4  v1
r5        v2    v3
r6        v2
r7              v3
r8

Kita dapat mengonversi setiap baris nilai C1, C2, dan C3 menjadi tiga baris nilai di bawah satu kolom sebagai berikut.

break on key skip 1 duplicates
select key, 'C1' as source, c1 as val from t union all
select key, 'C2' as source, c2 as val from t union all
select key, 'C3' as source, c3 as val from t
order by key, source ;

KEY SOURCE VAL
--- ------ -----
r1  C1     v1
r1  C2     v2
r1  C3     v3
r2  C1     v1
r2  C2     v2
r2  C3
r3  C1     v1
r3  C2
r3  C3     v3
r4  C1     v1
r4  C2
r4  C3
r5  C1
r5  C2     v2
r5  C3     v3
r6  C1
r6  C2     v2
r6  C3
r7  C1
r7  C2
r7  C3     v3
r8  C1
r8  C2
r8  C3

Jika kita tidak membutuhkan baris dengan nilai NULL dari C1, C2, atau C3, kita dapat menggunakan klausa WHERE untuk menyaringnya.

select key, 'C1' as source, c1 as val from t where c1 is not null union all
select key, 'C2' as source, c2 as val from t where c2 is not null union all
select key, 'C3' as source, c3 as val from t where c3 is not null
order by key, source ;

KEY SOURCE VAL
--- ------ -----
r1  C1     v1
r1  C2     v2
r1  C3     v3
r2  C1     v1
r2  C2     v2
r3  C1     v1
r3  C3     v3
r4  C1     v1
r5  C2     v2
r5  C3     v3
r6  C2     v2
r7  C3     v3

(c) http://Oracle-knowledgeshare.blogspot. de




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SELECT SUM mengembalikan baris ketika tidak ada catatan

  2. Prosedur UTL_FILE.FOPEN() tidak menerima jalur untuk direktori?

  3. Melakukan pembaruan massal dengan prosedur tersimpan MyBatis dan Oracle

  4. Petualangan Pembelian Ringan

  5. ORA-01704:string literal terlalu panjang 'Kesalahan saat memasukkan dokumen XML dalam tipe kolom Oracle XMLTYPE'