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

Присъединете/завъртете елементи с EAV таблица

Трябва да можете да използвате агрегатна функция с CASE израз за преобразуване на редовете в колони:

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;

Вижте SQL Fiddle с демонстрация .

Тъй като използвате Oracle 11g, тогава можете да използвате функцията PIVOT, за да получите резултата:

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;

Вижте SQL Fiddle с демонстрация




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Обединете две таблици и намерете припокриващи се дати и пропуски

  2. Относно елемента формат V в Oracle

  3. Валидиране на дата в Oracle без използване на функция

  4. ИЗБЕРЕТЕ данни от друга схема в Oracle

  5. SQL работна седмица в Oracle