Stefan: Werte einer Tabelle als Spalten verwenden

Hallo,

gibt es in einer SQL-Anweisung die Möglichkeit, die Werte einer Tabelle als Spalten zu verwenden?

Tabelle 1:

monat
2011-08
2011-07
2011-06
...

Tabelle 2:

name     monat      wert
max      2011-08    17
max      2011-07    13
max      2011-06     9
peter    2011-07    22
peter    2011-06    10
heinz    2011-08    13
heinz    2011-07     1

Ergebnis der SQL-Anweisung soll folgende Ausgabe sein:

name     2011-08   2011-07   2011-06
max           17        13         9
peter          0        22        10
heinz         13         1         0

Hat da jemand eine Idee, wie man es so hinbekommen kann? Die Monate ändern sich regelmäßig, wobei es immer die letzten zwölf vollen Monate sein sollen.

MfG, Stefan

  1. Hello,

    name     2011-08   2011-07   2011-06
    max           17        13         9
    peter          0        22        10
    heinz         13         1         0

    üblicherweise schränkt man dann nach dem Gruppierungskriterium ein, gruppiert die Ausgabe und sortiert sie nach dem zweiten Kriterium, und überlässt die Auflösung des Gruppenwechsels dann der darstellenden API.

    Unter "Gruppenwechsel" findest Du im hiesigen Archiv und im Web garantiert eine Menge Anregungen.

    Liebe Grüße aus dem schönen Oberharz

    Tom vom Berg

    --
     ☻_
    /▌
    / \ Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de
    1. Hello,

      Unter "Gruppenwechsel" findest Du im hiesigen Archiv und im Web garantiert eine Menge Anregungen.

      und einen Link zum Nachtisch gibt es auch noch
      http://dev.mysql.com/tech-resources/articles/wizard/print_version.html

      Liebe Grüße aus dem schönen Oberharz

      Tom vom Berg

      --
       ☻_
      /▌
      / \ Nur selber lernen macht schlau
      http://bergpost.annerschbarrich.de
    2. Hallo Tom,

      üblicherweise schränkt man dann nach dem Gruppierungskriterium ein, gruppiert die Ausgabe und sortiert sie nach dem zweiten Kriterium, und überlässt die Auflösung des Gruppenwechsels dann der darstellenden API.

      das Programm, was ich als API habe, lässt die Festlegung von SQL-Anweisungen zu, allerdings kann ich deren Ausgabe dann nicht mehr irgendwie bearbeiten, sondern das Ergebnis der SQL-Anweisung wird automatisch als Tabelle ausgegeben. Damit muß ich meine "Wunschtabelle" mittels der SQL-Anweisung erzeugen.

      Den Link von aus Deinem zweiten Posting habe ich mir angeschaut, aber da ist das Problem, dass die Spaltennamen ja jedesmal anders sind. Ist heute '2011-08' die erste Spalte, wird es dann im September '2011-09' sein usw.

      MfG, Stefan

      1. Hello,

        Den Link von aus Deinem zweiten Posting habe ich mir angeschaut, aber da ist das Problem, dass die Spaltennamen ja jedesmal anders sind. Ist heute '2011-08' die erste Spalte, wird es dann im September '2011-09' sein usw.

        Den kann man ja berechnen, wenn es eine Regel dafür gibt.
        Das scheint mir sowieso das einfachste zu sein.

        Du hast aber noch nicht erzählt, welches DBMS Du verwendest. Manche DBMS können von Haus aus Kreuztabellen erstellen.

        Den Link auf den MySQL-Artikel habe ich auf Verdacht nachgereicht, weil ich den Artikel ganz ausführlich finde.

        Liebe Grüße aus dem schönen Oberharz

        Tom vom Berg

        --
         ☻_
        /▌
        / \ Nur selber lernen macht schlau
        http://bergpost.annerschbarrich.de
        1. Hallo Tom,

          Den kann man ja berechnen, wenn es eine Regel dafür gibt.
          Das scheint mir sowieso das einfachste zu sein.

          hast Du da mal ein Beispiel? Also wie kann ich "SELECT name, 2011-08, 2011-07, 2011-06 ..." usw. berechnen?

          (Die Spaltenname sind ein Problem, wenn sie nur aus Ziffern bestehen, aber das ist ein anderes Thema.)

          Du hast aber noch nicht erzählt, welches DBMS Du verwendest. Manche DBMS können von Haus aus Kreuztabellen erstellen.

          Hatte ich mit Absicht erstmal weggelassen, es ist Informix V10 und da kennt sich vermutlich kaum jemand mit aus, ist ja nicht mehr so verbreitet. Aber ich kann ja dann schauen, ob die SQL-Lösung, wenn es eine gibt, auch damit umsetzbar ist.

          MfG, Stefan

          1. Hi,

            aber da ist das Problem, dass die Spaltennamen ja jedesmal anders sind. Ist heute '2011-08' die erste Spalte, wird es dann im September '2011-09' sein usw.

            Den kann man ja berechnen, wenn es eine Regel dafür gibt.
            Das scheint mir sowieso das einfachste zu sein.

            hast Du da mal ein Beispiel? Also wie kann ich "SELECT name, 2011-08, 2011-07, 2011-06 ..." usw. berechnen?

            MySQL weiß, welches Datum „heute“ ist.
            Wenn du nicht weißt, woher du das innerhalb einer Abfrage erfragen kannst - dann schau bitte im Handbuch bei den Datums- und Zeit-Funktionen nach.

            MfG ChrisB

            --
            RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
            1. Hallo Chris,

              MySQL weiß, welches Datum „heute“ ist.
              Wenn du nicht weißt, woher du das innerhalb einer Abfrage erfragen kannst - dann schau bitte im Handbuch bei den Datums- und Zeit-Funktionen nach.

              das ist kein Problem, TODAY liefert mit den Wert zurück. Kann man auf dem Weg Spaltennamen erzeugen? Also "TODAY - 1 month" usw.? Kann ich mir gerade nicht vorstellen, dass das geht?

              MfG, Stefan

              1. Hello,

                MySQL weiß, welches Datum „heute“ ist.
                Wenn du nicht weißt, woher du das innerhalb einer Abfrage erfragen kannst - dann schau bitte im Handbuch bei den Datums- und Zeit-Funktionen nach.

                das ist kein Problem, TODAY liefert mit den Wert zurück. Kann man auf dem Weg Spaltennamen erzeugen? Also "TODAY - 1 month" usw.? Kann ich mir gerade nicht vorstellen, dass das geht?

                Du brauchst auch keine Spaltennamen für die Tabellenabrafe zu erzeugen, sondern nur für das Select Werte zu berechnen, nach denen Du dann filtern kannst und dann kannst du diese später mit "as" für die Namen der _Überschriften_ beim View verwenden, also nur in Richtug der Ausgabe.

                Liebe Grüße aus dem schönen Oberharz

                Tom vom Berg

                --
                 ☻_
                /▌
                / \ Nur selber lernen macht schlau
                http://bergpost.annerschbarrich.de