Werte einer Tabelle als Spalten verwenden
Stefan
- datenbank
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
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

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

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
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

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
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
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
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
