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 withDemo を参照してください。 。

    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 withDemo を参照してください。




    1. AWSRDSのmax_connectionsの値

    2. サブクエリでビット単位のORを集約

    3. オフラインで動作し、データを保存し、オンライン時にリモートMySQLと同期できるWebアプリを作成しますか?

    4. 連続訪問数をカウントする