Hallo Maik,
hier noch die SQL-Anweisung (hier für drei Arzneien, die Erweiterung an Deine Bedürfnisse sollte Dir nicht schwer fallen)
beh_id |arznei1|arznei2|arznei3|...
1 | 78 | 12 | 0 |
2 | 12 | 0 | 0 |
SELECT /* Die Zielspalten, klar */
count(b.arznei) AS Anzahl, /* Anzahl */
b.arznei /* Häufigkeit */
FROM (
SELECT
id, /* aus welcher Zeile */
a1 AS arznei, /* gewünschte Daten */
'a' AS spalte /* aus welcher Spalte */
FROM behandlungen
/* Anmerkungen:
Spaltennamen kannst Du nur in der ersten SELECT-Anweisung vorgeben
Eigentlich sollte ALL dafür sorgen, dass alle Datensätze angezeigt
werden, aber irgendwie wollten weder MySQL noch MS SQL Server 2000.
Daher habe ich zur Identifikation jeden Wertes mit Spalte und Zeile
gearbeitet.
*/
UNION
SELECT id, a2, 'b' FROM behandlungen
UNION
SELECT id, a3, 'c' FROM behandlungen
) AS b
GROUP BY b.arznei /* Gruppierungsfeld */
ORDER BY Anzahl DESC /* Sortierung */
anzahl |arznei
3 | 0
2 | 12
1 | 78
Ja, mir ist eine Lösung mit Verwendung von UNION und Subselects eingefallen, diese beiden Features werden jedoch nicht von jeder MySQL-Version unterstützt. Welche MySQL-Version steht Dir zur Verfügung?
Mein Statement habe ich mit MySQL 4.1.11 getestet.
Möglicherweise gibt es auch andere Möglichkeiten; dies war die erste, die mir eingefallen ist und erfreulicherweise trotz des defekten Tabellendesigns (siehe Posting von nance) zum gewünschten Resultat führt.
Freundliche Grüße
Vinzenz