MySQL tableau croisé dynamique
Si j'ai une table MySQL à la recherche de quelque chose comme ceci:
company_name d'action de la propriété pagecount ------------------------------- Société d'IMPRESSION 3 Société d'IMPRESSION 2 Société d'IMPRESSION 3 La société B e-MAIL La société B d'IMPRESSION 2 La société B d'IMPRESSION 2 La société B d'IMPRESSION 1 Société d'IMPRESSION 3
Est-il possible d'exécuter une requête MySQL pour obtenir la sortie comme ceci:
company_name EMAIL IMPRIMER les pages 1 IMPRIMER 2 pages d'IMPRESSION 3 pages ------------------------------------------------------------- CompanyA 0 0 1 3 Entrepriseb 1 1 2 0
L'idée est que pagecount
peut varier de sorte que la sortie de la colonne montant doit refléter le fait que, une colonne pour chaque action
/pagecount
paire et le nombre de visites par company_name
. Je ne sais pas si cela s'appelle un tableau croisé dynamique, mais quelqu'un a suggéré que?
Il est appelé le pivot et c'est beaucoup, beaucoup plus rapide à faire cette transformation à l'extérieur de SQL.
Excel déchire à travers des choses comme ça, c'est vraiment difficile dans MySQL comme il n'y a pas de "tableau CROISÉ" de l'opérateur 🙁
Oui c'est actuellement fait à la main, dans Excel, et nous essayons de l'automatiser.
Ici, j'ai trouvé étape par étape exemple: comment faire pour automatiser les tableaux croisés dynamiques. et ceci
cela dépend vraiment de ce que vous et vos collègues jugent plus simple. La technologie rattrapé un peu depuis que j'ai posté le commentaire (4 ans), il est donc tout à fait à ce que vous vous sentez le mieux - être dans l'application ou SQL. Par exemple, à mon travail, nous traitons avec le même problème, mais nous sommes en combinant les deux SQL et dans l'application de l'approche. En gros, je ne peux pas vous aider les autres que de donner des opinions réponse et ce n'est pas ce dont vous avez besoin 🙂
Excel déchire à travers des choses comme ça, c'est vraiment difficile dans MySQL comme il n'y a pas de "tableau CROISÉ" de l'opérateur 🙁
Oui c'est actuellement fait à la main, dans Excel, et nous essayons de l'automatiser.
Ici, j'ai trouvé étape par étape exemple: comment faire pour automatiser les tableaux croisés dynamiques. et ceci
cela dépend vraiment de ce que vous et vos collègues jugent plus simple. La technologie rattrapé un peu depuis que j'ai posté le commentaire (4 ans), il est donc tout à fait à ce que vous vous sentez le mieux - être dans l'application ou SQL. Par exemple, à mon travail, nous traitons avec le même problème, mais nous sommes en combinant les deux SQL et dans l'application de l'approche. En gros, je ne peux pas vous aider les autres que de donner des opinions réponse et ce n'est pas ce dont vous avez besoin 🙂
OriginalL'auteur peku | 2011-10-06
Vous devez vous connecter pour publier un commentaire.
Fondamentalement est un tableau croisé dynamique.
Un joli tutoriel sur la façon de réaliser ce qui peut être trouvé ici: http://www.artfulsoftware.com/infotree/qrytip.php?id=78
Je conseille la lecture de ce post et d'adapter cette solution à vos besoins.
Mise à jour
Après le lien ci-dessus n'est pas disponible actuellement plus je me sens obligé de fournir quelques informations supplémentaires pour vous tous à la recherche pour mysql pivot des réponses ici. Il avait vraiment une grande quantité d'informations, et je ne vais pas tout mettre dans ici (encore plus depuis que je ne veux pas copier leurs vastes connaissances), mais je vais vous donner quelques conseils sur la façon de traiter avec les tableaux croisés dynamiques sql façon généralement avec l'exemple de la peku qui a posé la question en premier lieu.
Peut-être que le lien est bientôt de retour, je vais garder un œil sur elle.
La feuille de calcul de façon...
Beaucoup de gens il suffit d'utiliser un outil comme MSExcel, OpenOffice ou autre feuille de calcul-outils à cette fin. C'est une solution valable, il suffit de copier les données là-bas et utilisez les outils de l'interface graphique offre de résoudre ce problème.
Mais... ce n'était pas la question, et elle pourrait même conduire à quelques inconvénients, comme la façon d'obtenir les données dans la feuille de calcul, problème de mise à l'échelle et ainsi de suite.
SQL façon...
Donné sa table ressemble à quelque chose comme ceci:
Maintenant regarde dans sa table désirée:
Les lignes (
EMAIL
,PRINT x pages
) ressemblent à des conditions. Le principal groupement est parcompany_name
.Afin de mettre en place les conditions de la présente plutôt des cris pour que l'aide de la
CAS
-déclaration. Afin de les regrouper par quelque chose, eh bien, l'utilisation ...GROUP BY
.La base SQL de fournir ce pivot peut ressembler à quelque chose comme ceci:
Ce qui devrait fournir le résultat souhaité très vite. L'inconvénient majeur de cette approche, plus le nombre de lignes que vous voulez dans votre tableau croisé dynamique, le plus de conditions que vous devez définir dans votre instruction SQL.
Cette question peut être résolue, trop, donc les gens ont tendance à utiliser les requêtes préparées, les routines, les compteurs et autres.
Quelques liens supplémentaires sur ce sujet:
le lien semble fonctionner pour le moment... si elle ne va jamais vers le bas encore une fois, essayez ces : le cache de Google webcache.googleusercontent.com/... ou sur Internet Wayback Machine (web.archive.org/web/20070303120558*/artfulsoftware.com/infotree/queries.php)
le lien est accessible à cette adresse artfulsoftware.com/infotree/qrytip.php?id=78
Il y a une autre façon de générer un tableau croisé dynamique sans l'aide de "si", "cas", ou "GROUP_CONCAT": en.wikibooks.org/wiki/MySQL/Pivot_table
déjà posté un quesiombut elle a été marquée en double.
OriginalL'auteur Bjoern
Ma solution est en T-SQL, sans pivots:
Cela fonctionne pour moi, même sur PostgreSQL. Je préfère cette méthode qu'à l'aide du tableau croisé extension sur Postgres que c'est nettoyeur
"Ma solution est en T-SQL, sans pivots:" Non seulement SQL Server, il devrait fonctionner sur la plupart des fournisseurs de bases de données qui suit les normes ANSI SQL. Notez que
SUM()
ne peut travailler qu'avec des données numériques si vous nie de pivot de chaînes, vous devrez utiliserMAX()
OriginalL'auteur RRM
Pour MySQL, vous pouvez directement mettre des conditions dans
SUM()
fonction et il sera évalué comme Booléenne0
ou1
et donc vous pouvez avoir votre compte selon vos critères, sans l'aide deIF/CASE
étatsDÉMO
C'est vraiment intéressant. Savez-vous si cela est conforme aux normes sur d'autres plates-formes (comme Postgres)?
Pas de son pour seulement Mysql spécifique
J'ai ajouté un autre SQL standard version. Postgres a aussi un dédié
crosstab()
de la fonction.Fonctionne également pour SQLite
OriginalL'auteur M Khalid Junaid
Dynamiques (pivot, l'utilisation
GROUP_CONCAT
avecCONCAT
.Le GROUP_CONCAT fonction concatène les chaînes à partir d'un groupe en une seule chaîne avec différentes options.
DÉMO ICI
Pacerier, vrai homme, mais pour la dynamique du pivotement de l'un des meilleurs de l'approche
Cela fonctionne bien si vous avez beaucoup de valeurs dans la colonne "actions" ou de s'attendre à ce que la liste de croître au fil du temps, comme l'écriture d'une instruction case pour chaque valeur peut être long et difficile de se tenir à jour.
OriginalL'auteur Abhishek Gupta
Un standard-SQL version à l'aide de la logique booléenne:
SQL Violon.
Comment?
TRUE OR NULL
rendementsTRUE
.FALSE OR NULL
rendementsNULL
.NULL OR NULL
rendementsNULL
.Et
COUNT
ne prend en compte que les valeurs non null. Voilá.Mais comment vous savez qu'il y a trois colonnes? Que faire si il y a 5? 10? 20?
L'exemple de la question semble suggérer que. De toute façon, SQL demande pour connaître le type de retour. un complètement requête dynamique n'est pas possible. Si le nombre de colonnes de sortie peut varier, vous avez besoin de deux étapes: 1ère construire la requête, 2ème: l'exécuter.
OriginalL'auteur Erwin Brandstetter
Il existe un outil appelé MySQL tableau croisé dynamique générateur, il peut vous aider à créer basé sur le web de tableau croisé dynamique que vous pourrez par la suite exporter vers excel(si vous aimez). il ne peut fonctionner que si vos données sont dans un tableau unique ou dans plusieurs tables .
Tout ce que vous devez faire est de spécifier la source de données des colonnes (il prend en charge les colonnes dynamiques), les lignes , les valeurs dans le corps de la table et de la table de relation (si il y en a)
La page d'accueil de cet outil est http://mysqlpivottable.net
OriginalL'auteur Peter Green
Bonne réponse est:
other_value
table?OriginalL'auteur Talha
OriginalL'auteur irba