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

Gabung/Pivot item dengan tabel EAV

Anda harus dapat menggunakan fungsi agregat dengan ekspresi CASE untuk mengubah baris menjadi kolom:

select d.id,
  d.name,
  max(case when a.attr_name = 'color' then a.value end) color,
  max(case when a.attr_name = 'brand' then a.value end) brand,
  max(case when a.attr_name = 'size' then a.value end) size
from product_description d
inner join product_attributes a
  on d.id = a.id
group by d.id, d.name;

Lihat SQL Fiddle dengan Demo .

Karena Anda menggunakan Oracle 11g, maka Anda dapat menggunakan fungsi PIVOT untuk mendapatkan hasilnya:

select id, name, Color, Brand, "Size"
from
(
  select d.id, d.name,
    a.attr_name, a.value
  from product_description d
  inner join product_attributes a
    on d.id = a.id
) src
pivot
(
  max(value)
  for attr_name in ('color' as Color,
                    'brand' as Brand,
                    'size' as "Size")
) p;

Lihat SQL Fiddle dengan Demo




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pemadaman dengan EMCLI

  2. Oracle SQL - dapatkah CASE digunakan dalam batasan pemeriksaan untuk menentukan atribut data?

  3. Ubah nomor menjadi tanggal sql oracle

  4. PHP oci_connect() TNS:tidak dapat menyelesaikan pengidentifikasi koneksi (ORA-12154)

  5. Oracle sql untuk menghitung instance dari nilai yang berbeda dalam satu kolom