sql >> Databasteknik >  >> RDS >> PostgreSQL

Välj flera radvärden till en rad med flertabellssatser

Om varje attribut bara har ett enda värde för en användare kan du börja med att göra en gles matris:

SELECT user_id
      ,CASE WHEN attrib_id = 1 THEN value ELSE NULL END AS attrib_1_val
      ,CASE WHEN attrib_id = 2 THEN value ELSE NULL END AS attrib_2_val
  FROM UserAttribute;

Komprimera sedan matrisen med en aggregatfunktion:

SELECT user_id
      ,MAX(CASE WHEN attrib_id = 1 THEN value ELSE NULL END) AS attrib_1_val
      ,MAX(CASE WHEN attrib_id = 2 THEN value ELSE NULL END) AS attrib_2_val
  FROM UserAttribute
  GROUP BY user_id;

Som svar på kommentaren, sökning efter attributnamn snarare än id:

SELECT ua.user_id
      ,MAX(CASE WHEN a.attrib_name = 'attrib1' THEN ua.value ELSE NULL END) AS attrib_1_val
      ,MAX(CASE WHEN a.attrib_name = 'attrib2' THEN ua.value ELSE NULL END) AS attrib_2_val
  FROM UserAttribute ua
  JOIN Attribute a ON (a.attrib_id = ua.attrib_id)
  WHERE a.attrib_name IN ('attrib1', 'attrib2')
  GROUP BY ua.user_id;


  1. UUID max teckenlängd

  2. Hur man använder flera databaser i Laravel

  3. Range Fyllningstabell

  4. Hur man löser problem med Oracle DBMS_LOB