Dies bedeutet im Grunde est eine Pivot-Tabelle.
Eine schöne Anleitung, wie man dies erreicht, finden Sie hier: http://www.artfulsoftware.com/infotree/qrytip.php?id=78
Ich empfehle Ihnen, diesen Beitrag zu lesen und diese Lösung an Ihre Bedürfnisse anzupassen.
Update
Nachdem der obige Link derzeit nicht mehr verfügbar ist, fühle ich mich verpflichtet, einige zusätzliche Informationen für alle, die hier nach Antworten zu mysql pivot suchen, bereitzustellen. Es hatte wirklich eine riesige Menge an Informationen, und ich werde nicht alles von dort in hier (noch mehr, da ich einfach nicht wollen, um ihre riesigen Wissen zu kopieren), aber ich werde einige Ratschläge, wie man mit Pivot-Tabellen die Sql-Weg im Allgemeinen mit dem Beispiel von peku, der die Frage in den ersten Platz gefragt geben.
Vielleicht kommt der Link bald wieder, ich werde die Augen offen halten.
Der Weg der Tabellenkalkulation...
Viele Leute verwenden für diesen Zweck einfach ein Tool wie MSExcel, OpenOffice oder andere Tabellenkalkulationsprogramme. Das ist eine gute Lösung. Kopieren Sie die Daten einfach dorthin und verwenden Sie die Werkzeuge, die die grafische Benutzeroberfläche bietet, um dieses Problem zu lösen.
Aber... das war nicht die Frage, und es könnte sogar zu einigen Nachteilen führen, z.B. wie man die Daten in die Tabellenkalkulation bekommt, problematische Skalierung und so weiter.
Der SQL-Weg...
Seine Tabelle sieht in etwa wie folgt aus:
CREATE TABLE `test_pivot` (
`pid` bigint(20) NOT NULL AUTO_INCREMENT,
`company_name` varchar(32) DEFAULT NULL,
`action` varchar(16) DEFAULT NULL,
`pagecount` bigint(20) DEFAULT NULL,
PRIMARY KEY (`pid`)
) ENGINE=MyISAM;
Schauen Sie nun in seine/ihre gewünschte Tabelle:
company_name EMAIL PRINT 1 pages PRINT 2 pages PRINT 3 pages
-------------------------------------------------------------
CompanyA 0 0 1 3
CompanyB 1 1 2 0
Die Zeilen ( EMAIL
, PRINT x pages
) ähneln den Bedingungen. Die Hauptgruppierung ist nach company_name
.
Um die Bedingungen zu schaffen, schreit dies geradezu nach der Verwendung des CASE
-Erklärung. Um nach etwas zu gruppieren, also, verwenden Sie ... GROUP BY
.
Die Basis-SQL, die dieses Pivot liefert, kann etwa so aussehen:
SELECT P.`company_name`,
COUNT(
CASE
WHEN P.`action`='EMAIL'
THEN 1
ELSE NULL
END
) AS 'EMAIL',
COUNT(
CASE
WHEN P.`action`='PRINT' AND P.`pagecount` = '1'
THEN P.`pagecount`
ELSE NULL
END
) AS 'PRINT 1 pages',
COUNT(
CASE
WHEN P.`action`='PRINT' AND P.`pagecount` = '2'
THEN P.`pagecount`
ELSE NULL
END
) AS 'PRINT 2 pages',
COUNT(
CASE
WHEN P.`action`='PRINT' AND P.`pagecount` = '3'
THEN P.`pagecount`
ELSE NULL
END
) AS 'PRINT 3 pages'
FROM test_pivot P
GROUP BY P.`company_name`;
Dies sollte sehr schnell das gewünschte Ergebnis bringen. Der große Nachteil dieses Ansatzes: Je mehr Zeilen Sie in Ihrer Pivot-Tabelle haben wollen, desto mehr Bedingungen müssen Sie in Ihrer SQL-Anweisung definieren.
Auch damit kann man umgehen, deshalb neigt man dazu, vorbereitete Anweisungen, Routinen, Zähler und dergleichen zu verwenden.
Einige zusätzliche Links zu diesem Thema: