Diese im Grunde ist eine Pivot - Tabelle.
Ein nettes Tutorial dazu finden Sie hier: http://www.artfulsoftware.com/infotree/qrytip.php?id=78
Ich empfehle, diesen Beitrag zu lesen und diese Lösung an Ihre Bedürfnisse anzupassen.
Aktualisieren
Nachdem der obige Link derzeit nicht mehr verfügbar ist, fühle ich mich verpflichtet, einige zusätzliche Informationen für alle bereitzustellen, die hier nach MySQL-Pivot-Antworten suchen. Es gab wirklich eine Menge Informationen, und ich werde hier nicht alles von hier einfügen (noch mehr, da ich ihr umfangreiches Wissen einfach nicht kopieren möchte), aber ich werde einige Ratschläge geben, wie man mit Pivot umgeht Tabellen die SQL-Art im Allgemeinen mit dem Beispiel von Peku, der die Frage an erster Stelle gestellt hat.
Vielleicht kommt der Link bald zurück, ich werde ein Auge darauf haben.
Die Tabellenkalkulation ...
Viele Leute verwenden zu diesem Zweck nur ein Tool wie MSExcel, OpenOffice oder andere Tabellenkalkulations-Tools. Dies ist eine gültige Lösung. Kopieren Sie einfach die Daten dort und verwenden Sie die von der GUI angebotenen Tools, um dies zu lösen.
Aber ... das war nicht die Frage, und es könnte sogar zu einigen Nachteilen führen, wie zum Beispiel, wie die Daten in die Tabelle aufgenommen werden, problematische Skalierung und so weiter.
Der SQL-Weg ...
Angesichts dessen sieht sein Tisch ungefähr so 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 den gewünschten Tisch:
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 von company_name
.
Um die Bedingungen einzurichten, ruft dies eher nach der Verwendung der CASE
Anweisung. Um zu einer Gruppe von etwas, na ja, Gebrauch ... GROUP BY
.
Das grundlegende SQL, das diesen Pivot bereitstellt, kann ungefähr 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 liefern. Je größer der Nachteil dieses Ansatzes ist, desto mehr Zeilen müssen in Ihrer Pivot-Tabelle enthalten sein, desto mehr Bedingungen müssen Sie in Ihrer SQL-Anweisung definieren.
Dies kann auch behandelt werden, daher neigen die Leute dazu, vorbereitete Anweisungen, Routinen, Zähler und dergleichen zu verwenden.
Einige zusätzliche Links zu diesem Thema: