Lydia.h: MySQL Kreuztabelle/Pivottabelle

Hallo ihr Lieben,

leider checke ich es trotz ausführlicher Recherche bei Google nicht, wie man eine Kreuztabelle in MySQL erstellt.

Mein Problem: ich habe pro Monat mehrere Aktionen und möchte ein Ergebnis mit einem Datensatz, Monatsspalten und den entsprechenden Aktionen.
Hier die Daten Tabelle Aktionen:
ID | Start      | Stop       | Aktion
1  | 2007-01-01 | 2007-02-28 | Aktion 1
2  | 2007-01-01 | 2007-03-30 | Aktion 2
3  | 2007-02-01 | 2007-04-30 | Aktion 3

Als Ergebnis sollten die Monate 1-12 als Spaltenüberschrift kommen und die entsprechenden Aktionen als Wert:

01              | 02                      | 03              | 04
Aktion1;Aktion2 | Aktion1;Aktion2;Aktion3 | Aktion2;Aktion3 | Aktion3

Ich habe es schon mit Group_CONCAT versucht, aber kann davon nicht den MAX ermitteln.

Vielleicht kann mir jemand Schritt für Schritt erklären, wie es geht, damit ich es endlich checke. Ich habe nämlich mehrere Kreuztabellen in der Schublade :-(

Liebe Grüße
Lydia.

  1. Vielleicht kann mir jemand Schritt für Schritt erklären, wie es geht, damit ich es endlich checke. Ich habe nämlich mehrere Kreuztabellen in der Schublade :-(

    Hast Du mal versucht mit Unterabfragen und per UNION-Operator verbundene Abfragen Dich der Sache zu naehern?
    Eventuell muesstest Du auch einen Cursor aufmachen und mithilfe der Programmflusskontrollsprache die Datensatzmengen druchlaufen und die angeforderte Datensatzmenge aufbauen.

    Auch mal die MySQL-Doku bemuehen:
    http://www.mysql.de/search/index.php?q=Kreuztabellenabfrage&base=http%3A%2F%2Fdev.mysql.com&lang=de&version=4.0&doc=0&m=o

    • hier kam leider nix
    1. Hallo Lully,
      ja, das habe ich, mit Unterabfragen (im FROM) klappt es, aber es ist jedes Mal eine riesen Prökelei, bis man das fertig hat.
      Ich dachte, es gibt vielleicht ein System (ich kann bei meinen Kreuztabellen keins entdecken), das man immer anwenden kann.

      Wäre für jeden Tipp dankbar.

      Lieben Gruß
      Lydia.

      1. Ich dachte, es gibt vielleicht ein System (ich kann bei meinen Kreuztabellen keins entdecken), das man immer anwenden kann.

        Das gibt es, mach einen Cursor auf mit der Quelldatensatzmenge, durchlaufe diesen und baue ein Tabellenobjekt - bspw. eine temp. Tabelle oder eine Variable vom Typ table - auf und gebe dieses Tabellenobjekt als Zieldatensatzmenge aus.
        :-

        Angeblich kann MS Access Kreuztabellenabfragen, hat also eine bestimmte Syntax dafuer, das habe ich nicht ueberprueft, bitte recherchiere selbst. Du kannst ja vorher Richtung MS Access und Acces-SQL transformieren.   LOL
        Vielleicht meldet sich auch Vinnie, der Kreuztabellenexperte, zu Wort...

        1. Sorry, Lully, aber ich verstehe das mit dem Cursor nicht, habe ich noch nicht gemacht.

          MS Access kann sehr gut Kreuztabellen, damit kann ich es auch super. Aber die Syntax ist nicht in andere SQL-Dialekte übertragbar.

          Liebe Grüße
          Lydia.

          1. Hallo Lydia,

            MS Access kann sehr gut Kreuztabellen, damit kann ich es auch super. Aber die Syntax ist nicht in andere SQL-Dialekte übertragbar.

            wenn Du diese Aufgabe mit Jet-SQL lösen kannst, dann solltest Du das auch hinbekommen.
            Lies Dir bitte folgenden Archivthread durch:

            </archiv/2006/3/t125385/>

            insbesondere folgende Postings:
            </archiv/2006/3/t125385/#m808450>
            </archiv/2006/3/t125385/#m808888>

            Im zweiten Posting baue ich mit Hilfe eines Cursors dynamisch die Abfrage
            zusammen, die ich im ersten Posting von Hand geschrieben habe. Ich weiß,
            dass ich dort T-SQL verwendet habe und Du hier MySQL hast. Falls Deine
            Version Stored Procedures unterstützt, dann könnte es etwas werden.

            Freundliche Grüße

            Vinzenz