Ist es möglich Ergebnisse als Namen von Spalten zum Speichern von aggregierten Werten zu verwenden?

gczychi

Neuer Benutzer
Beiträge
2
Ist es möglich das Ergebnis einer Abfrage als Column-Namen für das Speichern von aggregierten Werten in eine zweite Tabelle zu verwenden? (SQL-92)

Hallo,
ich habe zwei Tabellen, wie folgt:

Tabelle 1 "Buchung":

id Konto Betrag
1 555 2.90
2 123 100
3 900 -25.25
4 555 140
5 123 33
6 123 10000​
Tabelle 2 "Erfolg":
id Sum100 … Sum123 … Sum380 … Sum555 … Sum900 … Sum999 … Zeitraum​

Es geht darum, alle Beträge der einzelnen, vorhandenen Konten in "Buchung" zu addieren, z.B. so:
Code:
SELECT Konto, SUM(Betrag) FROM Buchung GROUP BY Konto
Ich erhalte folgendes:

Konto,SUM(Betrag)
123,10133
555,142.9
900,-25.25​
Diese aggregierten Werte müssen jetzt in eine Zeile (!) von "Erfolg" geschrieben werden, z.B. so:
Code:
INSERT INTO Erfolg (Sum123, Sum555, Sum900) Values (10133, 142.9, -25.25)
oder, wenn es den Datensatz bereits gibt, in denen die Werte geschrieben werden:
Code:
INSERT INTO Erfolg (Sum123, Sum555, Sum900) Values (10133, 142.9, -25.25) WHERE Zeitraum = 2015.55
Die Frage ist: Wie kann ich das mit einem Query machen? Und zwar so, dass ich nicht alle möglichen "Konto"s auflisten muss, sondern nur die jeweils vorhandenen Kontobeträge von "Buchung" in "Erfolg" schreibe. Also nicht so:
Code:
   SELECT
     SUM ( CASE Konto WHEN 100 THEN Betrag END) AS Sum100,
     …
     SUM ( CASE Konto WHEN 123 THEN Betrag END) AS Sum123,
     …
     SUM ( CASE Konto WHEN 380 THEN Betrag END) AS Sum380
     …
   FROM Buchung

Zusätzliche Infos: Es gibt insgesamt etwa 70 mögliche Werte für Konto/SumNNN, von denen jedoch bei jeder Abfrage nur jeweils etwa 20 in "Buchung" vorhanden sind. Bei jedem Abfragezeitpunkt ändern sich die Kontos und auch deren Anzahl und natürlich die Anzahl und Werte der einzelnen Beträge. Ich muss diese Werte beliebig oft für beliebig viele Zeitraume in "Erfolg" speichern.
Ach ja, mein SQL ist von FileMaker und ist: "SQL-92 entry- level conformance, with some SQL-92 intermediate features". So etwas wie PIVOT gibt es leider nicht.
Vielen Dank für jeden Hinweis!

Gary
 
Werbung:
Ist es möglich das Ergebnis einer Abfrage als Column-Namen für das Speichern von aggregierten Werten in eine zweite Tabelle zu verwenden? (SQL-92)

Nein.

Was Du evtl. machen kannst: das SQL dazu dynamisch zusammenbauen. Wenn die DB z.B. stored Procs kann, dann evtl. damit. In PG könnt ich dir das aus dem Ärmel schütteln.

Was Du machen solltest: das DB-Design überdenken. Ich halte das so für grob falsch.
 
Hatte es fast befürchtet; beides. ;-) Die Tabellen existieren schon lange und da ran zu gehen wäre zuviel Aufwand.
Ich kann den zweiten query auch dynamisch generieren, hatte jedoch auf eine elegante Lösung gehofft.

Gibt es wirklich keine Möglichkeit die Feldnamen für die zweite Tabelle zu generieren? Z.B. mit Concat oder so (kenn mich mit SQL nicht so gut aus)?
 
Zuletzt bearbeitet von einem Moderator:
Werbung:
Zurück
Oben