Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

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

Dieses Thema im Forum "Microsoft SQL Server" wurde erstellt von Gimi27, 11 März 2020.

  1. Gimi27

    Gimi27 Benutzer

    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
     
  2. akretschmer

    akretschmer Datenbank-Guru

    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.
     
  3. Gimi27

    Gimi27 Benutzer

    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
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden