Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Dołącz/Przestaw przedmioty z tabelą EAV

Powinieneś być w stanie użyć funkcji agregującej z wyrażeniem CASE do konwersji wierszy na kolumny:

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;

Zobacz SQL Fiddle z wersją demonstracyjną .

Ponieważ używasz Oracle 11g, możesz użyć funkcji PIVOT, aby uzyskać wynik:

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;

Zobacz SQL Fiddle z wersją demonstracyjną




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle:Jak określić nową nazwę obiektu w wyzwalaczu AFTER ALTER?

  2. Jaka jest różnica między „nie w” a „nie istnieje”?

  3. tworzenie skryptu SQL

  4. Program ładujący SQL, nasycenie wyzwalacza?

  5. Jak przetestować procedurę składowaną Oracle z typem zwrotu RefCursor?