我想在表上執行自連接,以按列方式呈現值。對於每個對象,都有多個屬性(最多達到已知限制),但並非所有對象的所有屬性都被儲存。我嘗試過各種連接,但總是缺少行,我希望使用空值。
起始表:
物件ID | 屬性 | 值 |
---|---|---|
1 | 一個 | 10 |
1 | b | 20 |
1 | c | 30 |
2 | 一個 | 15 |
2 | c | 25 |
我的目標(假設我知道三個可能的屬性是 a,b,c
)是
物件ID | 一個 | 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