Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Tham gia / Tổng hợp các mục với bảng EAV

Bạn có thể sử dụng hàm tổng hợp với biểu thức CASE để chuyển các hàng thành cột:

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;

Xem SQL Fiddle with Demo .

Vì bạn đang sử dụng Oracle 11g, nên bạn có thể sử dụng hàm PIVOT để nhận kết quả:

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;

Xem SQL Fiddle với 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. Làm thế nào để lấy ngày hiện tại trong PL / SQL?

  2. Làm cách nào để tạo trục xoay động với ngày tháng và một cột khác trong oracle?

  3. Cách lên lịch chạy công việc vào thời điểm cụ thể bằng dbms_scheduler

  4. jdbc jar để sử dụng với oracle 11g &jdk 1.6 và cách kết nối với chính db

  5. Chèn nhiều bản ghi trong oracle