sql >> Databáze >  >> RDS >> Oracle

Spojit/Pivot položky pomocí tabulky EAV

Měli byste být schopni použít agregační funkci s výrazem CASE k převodu řádků na sloupce:

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;

Viz SQL Fiddle s ukázkou .

Protože používáte Oracle 11g, můžete k získání výsledku použít funkci 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;

Viz SQL Fiddle s ukázkou




  1. Příklady převodu ‚date‘ na ‚datetime2‘ v SQL Server (T-SQL)

  2. Jak vypsat dočasnou tabulku MySQL do souboru?

  3. Fluent NHibernate a PostgreSQL, SchemaMetadataUpdater.QuoteTableAndColumns - System.NotSupportedException:Zadaná metoda není podporována

  4. SQL Server a C#:získat poslední vložené id