Comment implémenter la sortie du tableau croisé dynamique dans MySQL
P粉481035232
2023-08-21 16:06:24
<p>Si j'ai une table MySQL comme celle-ci : </p>
Nombre de pages de l'action <pre>company_name
----------------------------------
ENTREPRISE A IMPRIMER 3
ENTREPRISE A IMPRIMER 2
ENTREPRISE A IMPRIMER 3
Société BEMAIL
Société B PRINT 2
Société B PRINT 2
SOCIÉTÉ B IMPRIMER 1
ENTREPRISE A IMPRIMER 3
≪/pré>
<p>Est-il possible d'exécuter une requête MySQL pour obtenir le résultat suivant : </p>
<pre>nom_entreprise EMAIL IMPRIMER 1 page IMPRIMER 2 pages IMPRIMER 3 pages
-------------------------------------------------- ----------
SociétéA 0 0 1 3
EntrepriseB 1 1 2 0
≪/pré>
<p>L'idée est que <code>pagecount</code> peut varier, donc le nombre de colonnes dans la sortie doit refléter cela, une pour chaque <code>action</code>/<code>pagecount< ;/code>, puis le nombre de clics pour chaque <code>company_name</code>. Je ne sais pas si cela s'appelle un tableau croisé dynamique, mais est-ce que quelqu'un l'a suggéré ? </p>
Ma solution est d'utiliser T-SQL sans aucun pivot :
Il s’agit essentiellement d’un tableau croisé dynamique.
Le tutoriel détaillé sur la façon d'implémenter cette fonction peut être trouvé ici : http://www.artfulsoftware.com/infotree/qrytip.php?id=78
Je vous recommande de lire cet article et d'adapter la solution à vos besoins.
Mise à jour
Étant donné que le lien ci-dessus n'est actuellement plus disponible, j'ai ressenti le besoin de fournir ici des informations supplémentaires à tous ceux qui recherchent des réponses aux tableaux croisés dynamiques MySQL. Il contient beaucoup d'informations, et je ne copierai pas tout ici (sans parler du fait que je ne veux pas copier leurs vastes connaissances), mais je donnerai quelques suggestions sur la façon de travailler avec des tableaux croisés dynamiques dans SQL, à The la question soulevée par peku en est un exemple.
Peut-être que le lien sera bientôt rétabli, je continuerai à le suivre.
Méthode tableur...
Beaucoup de gens utilisent simplement des tableurs comme MSExcel, OpenOffice ou autres à cette fin. C'est une solution valable, copiez simplement les données là-bas et utilisez les outils fournis par l'interface graphique pour résoudre le problème.
Mais... ce n'est pas le nœud du problème, et peut même conduire à certaines lacunes, comme la façon d'importer des données dans des feuilles de calcul, des problèmes de mise à l'échelle, etc.
Façon SQL...
Supposons que sa montre ressemble à ceci :
Maintenant, regardez la montre qu'il/elle veut :
行(
EMAIL
,PRINT x pages
)表示条件。主要分组是按company_name
réalisé.Pour définir des conditions, cela revient plutôt à utiliser l'instruction
CASE
CASE
语句。为了按某个东西进行分组,使用...GROUP BY
. Pour regrouper par quelque chose, utilisez...GROUP BY
.Le SQL de base pour fournir ce tableau croisé dynamique peut être comme ceci :
Cela devrait fournir les résultats souhaités très rapidement. Le principal inconvénient de cette approche est que vous devez définir davantage de conditions dans l'instruction SQL lorsque vous souhaitez avoir plus de lignes dans le tableau croisé dynamique.
Cela peut également être géré, de sorte que les gens ont tendance à utiliser des déclarations préparées, des routines, des compteurs, etc.
Quelques liens supplémentaires sur ce sujet :