Sum() über Bereich und Einzelwerte möglichst allgemein

Gimi27

Benutzer
Beiträge
12
Hallo zusammen,

ich suche einen Tipp, wie ich folgendes Problem lösen kann:
"15831A|70010A|73000A..77793A|77796A..77999A" ist ein beliebiger String, der übergeben wird. Die einzelnen Zahlen stellen Konten dar (nicht am A am Ende stören). Insgesamt zeigt das Beispiel eine Menge von Konten bzw. Kontenbereichen. Über die gesamte Menge möchte ich jetzt den Saldo möglichst in einem Befehl ermitteln. Um keine Missverständnisse aufkommen zu lassen. Ich suche also den Saldo von Konto 15831A + Saldo von Konto 70010A + Saldo aller Konten von 73000A bis 77793A u.s.w.

Der String ist wie gesagt ein Beispielstring. Ich weiß also nicht, wie viele Einzelkonten oder Bereiche übergeben werden. Vielleicht ist es auch nur ein Konto oder nur ein Bereich.

Ich hatte mir jetzt überlegt, den String in ein Array aufzuteilen, jeweils mit dem | als Trenner, also 4 Arrays im obigen Beispiel, 2 Einzelkonten und 2 Kontenbereiche. Dann müsste ich wohl die Kontosumme für jedes Array ermittel, wobei bei der Ermittlung ein Bereich noch abgefangen werden müsste. Also in etwas so:
sum(Betrag) where Kontonr >= KontoVon and Kontonr <= KontoBis.

Hat jemand von Euch vielleicht einen besseren Ansatz oder noch einen Tipp.

Vielen Dank im Voraus
Michael
 
Werbung:
joa, a bissl mit Strings spielen, oder so ...

Code:
test=*# with x as (select regexp_split_to_table('15831A|70010A|73000A..77793A|77796A..77999A','\|') as r), y as ( select case when r ~ '\.' then 'between ' || replace (r,'..',' and ') else r end from x) select string_agg(r,' or ') from y;
                                 string_agg                                 
----------------------------------------------------------------------------
 15831A or 70010A or between 73000A and 77793A or between 77796A and 77999A
(1 row)

mal als grobe Idee. Und mit PostgreSQL. Daraus könnte man dann dynamisch die passende Abfrage frickeln und via EXECUTE ausführen.
 
Werbung:
Hallo,
die Stringaufteilung habe ich bereits. Ich habe auch eine Skalarwertfunktion, die mir den Saldo liefert (wenn KontoBis gefüllt ist, dann auch den Saldo des Bereiches). Jetzt hänge ich der Zusammenfassung. Ich denke ich muss eine TempTabelle anlegen mit allen Selektionsbereichen und mit dem Saldo je Selektionsbereich und dann einfach ein sum() über den Saldo machen.

Grüße
Michael
 
Zurück
Oben