Heim > Fragen und Antworten > Hauptteil
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粉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