Maison  >  Questions et réponses  >  le corps du texte

Données manquantes d'auto-adhésion MySQL

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粉464208937P粉464208937219 Il y a quelques jours341

répondre à tous(1)je répondrai

  • P粉563446579

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

    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

    répondre
    0
  • Annulerrépondre