Zellen als Spalten nutzen und Werte zuordnen

Sonntag, 28. März 2010, 19:24 Uhr von Christian

In einer Tabelle sind für zwei fest definierte Kategorien A und B die jeweilige Anzahl zu den Ereignissen x und y wie folgt gegeben:

x  y  category  count
---------------------
1  2      A        10
1  2      B        20
1  3      A       100
1  3      B       200
1  4      A      1000
1  5      B      2000

Nun muss die Struktur zur Auswertung dahingehend geändert werden, dass die Kategorien A und B als Spalten und die jeweilige Anzahl als Wert in den Zeilen, gruppiert nach x und y, bereitstehen. Dazu müssen die Zeilen als Spalten ausgegeben und die jeweils zur Kategorie passende Anzahl, unter Berücksichtigung der Ereignisse, als Wert in diese Spalte geschrieben werden. Auch müssen bisher nicht definierte Anzahlen auf 0 gesetzt werden, sodass das Resultat folgendermaßen aussieht:

x  y    A     B
----------------
1  2    10    20
1  3   100   200
1  4  1000     0
1  5     0  2000

Erreicht werden kann das mit dieser Abfrage:

SELECT
  `x`, `y`,
  SUM(IF(`category` = "A", `count`, 0)) `A`,
  SUM(IF(`category` = "B", `count`, 0)) `B`
FROM `Test`
GROUP BY `x`, `y`

Hierbei wird das Ergebnis nach den Ereignissen x und y gruppiert und dabei für beide Kategorien die entsprechende Summe der Anzahl gebildet.

Das Problem dabei ist jedoch die Beschränkung auf eine vorgegebene Menge von Kategorien. Eine Lösung für variable Werte wäre interessant, lässt sich allerdings (wahrscheinlich) aufgrund der unklaren Anzahl resultierender Spalten nicht allein in SQL realisieren.

Für alle, die damit selbst ein wenig spielen möchten, hier die Anweisungen zum Erzeugen und Füllen der Test-Tabelle:

CREATE TABLE `Test` (
  `x` int(11) NOT NULL,
  `y` int(11) NOT NULL,
  `category` enum('A','B') NOT NULL,
  `count` int(11) NOT NULL
);

INSERT `Test` (`x`, `y`, `category`, `count`) VALUES
(1, 2, 'A', 10),
(1, 2, 'B', 20),
(1, 3, 'A', 100),
(1, 3, 'B', 200),
(1, 4, 'A', 1000),
(1, 5, 'B', 2000);

Geschrieben in: MySQL | Schlagwörter: ,
Keine Kommentare »

Über den Autor:
Christian

Weitere Artikel des Autors lesen.

Einen Kommentar abgeben

Bitte beachten Sie: Die Kommentare werden moderiert. Dies kann Ihren Kommentar verzögern. Es besteht aber kein Grund, ihn nochmal abzuschicken.