Données manquantes d'auto-adhésion MySQL
P粉464208937
P粉464208937 2024-03-31 10:07:32
0
1
393

Je souhaite effectuer une auto-jointure sur une table pour présenter les valeurs par colonne. Pour chaque objet, il existe plusieurs propriétés (jusqu'à une limite connue), mais toutes les propriétés de tous les objets ne sont pas stockées. J'ai essayé plusieurs jointures mais il manque toujours des lignes et je veux des valeurs nulles.

Tableau de départ :

ID d'objet Propriétés Valeur
1 un 10
1 b 20
1 c 30
2 un 15
2 c 25

Mon objectif (en supposant que je sache que les trois propriétés possibles sont a,b,c) est

ID d'objet un b c
1 10 20 30
2 15 25

P粉464208937
P粉464208937

répondre à tous(1)
P粉563446579

Vous pouvez utiliser la requête suivante pour y parvenir :

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

Description :

Utilisez la valeur de CASE 语句,我们选择 Attribute pour une valeur spécifique, c'est-à-dire "a", "b", etc. Ainsi, pour cette colonne particulière, seule la valeur de cet attribut particulier est sélectionnée.

Plusieurs valeurs de ligne utilisant SUM 我们聚合 Value 字段的值。这样,任何 ObjectID seront regroupées en une seule ligne.

Si vous ne souhaitez pas utiliser SUM 因为您可能有非数字值,您可以按照 @xQbert 的建议使用 MAX comme ceci :

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
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal