J'ai essayé de rechercher des publications mais je n'ai trouvé que des solutions pour SQL Server/Access. J'ai besoin d'une solution dans MySQL (5.X).
J'ai une table (appelée history) avec 3 colonnes : hostid, itemname, itemvalue.
Si j'effectue une sélection (select * from History
), elle renvoie
+--------+----------+-----------+ | hostid | itemname | itemvalue | +--------+----------+-----------+ | 1 | A | 10 | +--------+----------+-----------+ | 1 | B | 3 | +--------+----------+-----------+ | 2 | A | 9 | +--------+----------+-----------+ | 2 | C | 40 | +--------+----------+-----------+
Comment interroger une base de données pour renvoyer un contenu similaire
+--------+------+-----+-----+ | hostid | A | B | C | +--------+------+-----+-----+ | 1 | 10 | 3 | 0 | +--------+------+-----+-----+ | 2 | 9 | 0 | 40 | +--------+------+-----+-----+
J'ajouterai une description plus longue et plus détaillée des étapes pour résoudre ce problème. Je m'excuse si c'est trop long.
Je vais commencer par la base que vous avez donnée et l'utiliser pour définir quelques termes que j'utiliserai tout au long du reste de cet article. Ce sera la table de base :
Ce sera notre objectif, Joli tableau croisé dynamique :
La valeur dans la colonne
(pour des raisons évidentes).history.hostid
deviendra lahistory.hostid
列中的值将成为数据透视表中的y 值。history.itemname
y value dans le tableau croisé dynamique. Les valeurs de la colonnehistory.itemname
deviendront x-valuesÉtape 1 : Sélectionnez la colonne qui vous intéresse
fournit la valeurhostid
提供y 值,itemname
. Dans le résultat souhaité,hostid
fournit la valeur y etx .
Étape 2 : étendez la table de base avec des colonnes supplémentairesitemname
. Nous voulons généralement une colonne pour chaque valeur x. Rappelez-vous que notre colonne de valeur x est
NULL
的模式 -itemname = "A"
的行的新列A
:Notez que nous n'avons pas modifié le nombre de lignes - nous avons simplement ajouté des colonnes supplémentaires. Notez également que a des valeurs non nulles et que les autres nouvelles colonnes ont des valeurs nulles.
Étape 3 : Regroupez et agrégez la table étendue按 hostid 分组
. Nous avons besoin de car il fournit la valeur y :
NULL
(Notez que nous avons maintenant une ligne par valeur y.)D'accord, nous y sommes presque ! Il faut juste se débarrasser des moches .
Étape 4 : Embellir
. Nous remplacerons toutes les valeurs nulles par des zéros pour que l'ensemble de résultats soit meilleur :Nous avons terminé : nous avons créé un magnifique tableau croisé dynamique en utilisant MySQL.
🎜 🎜Choses à noter lors de l'application de ce processus :🎜itemvalue
NULL
,但也可能是0
或""
, cela dépend de votre situation spécifiquesum
,但是count
和max
也经常使用(max
souvent utilisé lors de la construction d'une seule ligne) "objet" réparti sur plusieurs lignes)group by
子句(并且不要忘记select
elles)Limites connues :