![]() |
Datenbank: Firebird • Version: 2.x • Zugriff über: IBDAC
Wie gruppiert summieren in Abhängikeit von einem Feld?
Hallo,
ich habe folgende Tabelle:
Code:
Nun sollen die Beträge nach den IDs gruppiert summiert werden. Und zwar so: Wenn die ID in ID1 steht, wird der Betrag einfach aus dem Feld Betrag zur die Summe addiert. Wenn die ID hingegen in ID2 steht, soll der Betrag mit umgekehrten Vorzeichen zur Summe addiert werden.
ID1 ID2 Betrag
1 3 10 1 2 30 2 1 -50 Ergebnis:
Code:
ID Summe
1 90 (Rechenweg: 10 + 30 + 50) 2 -80 (Rechenweg: -30 - 50) 3 -10 Wie sieht dazu der SQL-Ausdruck aus? |
AW: Wie gruppiert summieren in Abhängikeit von einem Feld?
So ungefähr wäre eine Mölichkeit
SQL-Code:
select id, sum( haben ) - sum( soll ) as saldo
from ( select bar.id as id, foo1.betrag as haben, foo2.betrag as soll from bar left join ( select id1 as id, betrag from foo ) foo1 on foo1.id = bar.id left join ( select id2 as id, betrag from foo ) foo2 on foo2.id = bar.id ) as foobar group by id |
AW: Wie gruppiert summieren in Abhängikeit von einem Feld?
Danke, ich denke mal das "foo" der Name meiner vorhandenen Tabelle ist. Wenn ich dafür meinen vorhandenen Tabellennamen eintrage, kommt die Meldung "Table unknown BAR". Wie löse ich das?
|
AW: Wie gruppiert summieren in Abhängikeit von einem Feld?
Hallo Herr Kollege,
da du keine Informationen zu den Namen deiner Tabellen angegeben hast, welche Namen hätte ich denn nehmen sollen? Carl-Gustav-Günter-Seine-Frau-Ihre-Tabelle? War mir aber zu lang zum tippen, also habe ich als Tabellennamen mal foo und bar gewählt. Du solltest deine Tabellen-Namen kennen. Wenn nicht, dann können wir dir gar nicht helfen. |
AW: Wie gruppiert summieren in Abhängikeit von einem Feld?
Es ist mir schon klar, warum Du das gemacht hast :-) Nur Du verwendest mehrere Platzhalter für mehrere Tabellennamen und ich habe aber nur eine Tabelle.
Wenn ich mir die Feldnamen anschaue ist foo mein Tabellenname (Betraege). "Bar" kann meine Tabelle (Betraege) nicht sein, denn z.B. "id" (Zeile 3 bar.id bei dir) gibt es dort nicht. In meiner Tabelle gibt es nur die Felder ID1 und ID2. Also was für "bar" eintragen? |
AW: Wie gruppiert summieren in Abhängikeit von einem Feld?
Ich schätze mal, wenn Du nur eine Tabelle hast, ist die Möglichkeit zur Umbenennung recht übersichtlich.
Ich vermute, es ging bei der Namenswahl von SR eher um Symbolik. Alternativ:
SQL-Code:
Wenn Dein Statement eher mit großen Ergebnismengen verwendet wird, würde ich vielleicht eher meins nehmen, wenn es um bestimmte, feste ID geht eher das von SR. Kann aber auch eine schlechte Idee sein.
select id1undid2, sum(betrag) from (
select id1 as id1undid2, betrag from foo union all select id2, -1*betrag from foo) group by id1undid2 |
AW: Wie gruppiert summieren in Abhängikeit von einem Feld?
Danke jobo, damit klappt es! Sir Rufos Code würde ich jedoch auch gerne austesten... Nur ich bekomme es einfach nicht hin, den zum laufen zu bekommen...
|
AW: Wie gruppiert summieren in Abhängikeit von einem Feld?
Ok, Du weißt, was ein Tabellenname ist? Und was ein Alias ist? Du hast nur eine Tabelle?
Ich bin jetzt kein Online Parser und kann Dir keine Zeilen und Spaltennummern mit Korrektur liefern. Du könntest Helfenden die Macht geben, indem Du konkrete Angaben zu den Problemen lieferst. Ersetze alle Tabellennamen in dem Statement durch Deinen Tabellennamen. Vieleicht gibt es noch irgendwo einen Tippfehler oder was auch immer, probier es aus. Am Ende ist die Frage, ob Du das Statement von SR verstehst. Wenn ja, kannst Du es korrigieren, wenn es nicht gelingt, frag hier mit Angabe der notwendigen Daten (Dein Tabellenname, Feldnamen, ..)und des resultierenden Fehlers. |
AW: Wie gruppiert summieren in Abhängikeit von einem Feld?
OK, also ich versuche den Fehler nochmal genauer zu beschreiben:
Hier habe ich foo durch den Namen meiner Tabelle "Betraege" ersetzt (zur besseren Erkennung nur hier mit Unterstrichen eingefasst). Das führt zu dem Fehler der in Zeile 4 hier steht:
SQL-Code:
Wenn ich nun auch bar in Zeile 4 durch meinen Tabellennamen "Betraege" gibt es die nächste Fehlermeldung:
select id, sum( haben ) - sum( soll ) as saldo
from ( select bar.id as id, foo1.betrag as haben, foo2.betrag as soll from bar <----- Table unknown "bar" left join ( select id1 as id, betrag from _Betraege_ ) foo1 on foo1.id = bar.id left join ( select id2 as id, betrag from _Betraege_ ) foo2 on foo2.id = bar.id ) as foobar group by id
SQL-Code:
Jetzt kennt er bar.id nicht mehr, was ja auch nachvollziebar ist. Was also statt bar eintragen oder wo bar definieren? (Wenn dort auch mein Tabellenname eingetragen wird, läuft die Query endlos...)
select id, sum( haben ) - sum( soll ) as saldo
from ( select bar.id as id, foo1.betrag as haben, foo2.betrag as soll from _Betraege_ left join ( select id1 as id, betrag from _Betraege_ ) foo1 on foo1.id = bar.id <------ Column unkonwn bar.id left join ( select id2 as id, betrag from _Betraege_ ) foo2 on foo2.id = bar.id ) as foobar group by id |
AW: Wie gruppiert summieren in Abhängikeit von einem Feld?
Obwohl ich gerade sehe, dass es bei meinem Statement zu doppelten Zählungen kommen kann.
Ein union ist da unverzichtbar.
SQL-Code:
Hier mal ein
select konto.id, sum( buch.haben ) - sum( buch.soll ) as saldo
from konto left join ( select id1 as id, betrag as haben, 0 as soll from buchung union select id2 as id, 0 as haben, betrag as soll from buchung ) as buch on buch.id = konto.id group by konto.id ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:48 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz