MySQL自連線缺失數據
P粉464208937
P粉464208937 2024-03-31 10:07:32
0
1
360

我想在表上執行自連接,以按列方式呈現值。對於每個對象,都有多個屬性(最多達到已知限制),但並非所有對象的所有屬性都被儲存。我嘗試過各種連接,但總是缺少行,我希望使用空值。

起始表:

物件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粉464208937
P粉464208937

全部回覆(1)
P粉563446579

您可以使用以下查詢來實現它:

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
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板