suchen

Heim  >  Fragen und Antworten  >  Hauptteil

MySQL-Selbstverknüpfung fehlender Daten

Ich möchte einen Self-Join für eine Tabelle durchführen, um die Werte spaltenweise darzustellen. Für jedes Objekt gibt es mehrere Eigenschaften (bis zu einem bekannten Grenzwert), es werden jedoch nicht alle Eigenschaften für alle Objekte gespeichert. Ich habe verschiedene Verknüpfungen ausprobiert, aber es fehlen immer Zeilen und ich möchte Nullwerte.

Starttisch:

Objekt-ID Eigenschaften Wert
1 eins 10
1 b 20
1 c 30
2 eins 15
2 c 25

Mein Ziel (vorausgesetzt, ich weiß, dass die drei möglichen Eigenschaften a,b,c sind) ist

Objekt-ID eins b c
1 10 20 30
2 15 25

P粉464208937P粉464208937240 Tage vor365

Antworte allen(1)Ich werde antworten

  • P粉563446579

    P粉5634465792024-04-01 09:26:44

    您可以使用以下查询来实现它:

    SELECT
        ObjectID,  
        SUM(CASE WHEN Attribute = 'a' THEN Value ELSE NULL END) AS a,
        SUM(CASE WHEN Attribute = 'b' THEN Value ELSE NULL END) AS b,
        SUM(CASE WHEN Attribute = 'c' THEN Value ELSE NULL END) AS c
    FROM mytable
    GROUP BY ObjectID

    说明:

    使用 CASE 语句,我们选择 Attribute 的值作为特定值,即“a”、“b”等。因此,对于该特定列,仅选择该特定属性的值。

    使用 SUM 我们聚合 Value 字段的值。这样,任何 ObjectID 的多行值都会聚合到一行中。

    如果您不愿意使用 SUM 因为您可能有非数字值,您可以按照 @xQbert 的建议使用 MAX ,如下所示:

    SELECT
        ObjectID,  
        MAX(CASE WHEN Attribute = 'a' THEN Value ELSE NULL END) AS a,
        MAX(CASE WHEN Attribute = 'b' THEN Value ELSE NULL END) AS b,
        MAX(CASE WHEN Attribute = 'c' THEN Value ELSE NULL END) AS c
    FROM mytable
    GROUP BY ObjectID

    Antwort
    0
  • StornierenAntwort