AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Wie gruppiert summieren in Abhängikeit von einem Feld?
Thema durchsuchen
Ansicht
Themen-Optionen

Wie gruppiert summieren in Abhängikeit von einem Feld?

Ein Thema von BlueStarHH · begonnen am 16. Jul 2016 · letzter Beitrag vom 17. Jul 2016
Antwort Antwort
Seite 1 von 2  1 2      
BlueStarHH

Registriert seit: 28. Mär 2005
Ort: Hannover-Hainholz
801 Beiträge
 
Delphi 11 Alexandria
 
#1

Wie gruppiert summieren in Abhängikeit von einem Feld?

  Alt 16. Jul 2016, 17:37
Datenbank: Firebird • Version: 2.x • Zugriff über: IBDAC
Hallo,

ich habe folgende Tabelle:

Code:
ID1  ID2   Betrag
 1    3       10
 1    2       30
 2    1      -50
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.

Ergebnis:

Code:
ID Summe
1   90    (Rechenweg: 10 + 30 + 50)
2  -80    (Rechenweg: -30 - 50)
3  -10

Wie sieht dazu der SQL-Ausdruck aus?
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: Wie gruppiert summieren in Abhängikeit von einem Feld?

  Alt 16. Jul 2016, 18:15
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
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
BlueStarHH

Registriert seit: 28. Mär 2005
Ort: Hannover-Hainholz
801 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Wie gruppiert summieren in Abhängikeit von einem Feld?

  Alt 16. Jul 2016, 18:55
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?
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: Wie gruppiert summieren in Abhängikeit von einem Feld?

  Alt 16. Jul 2016, 19:06
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.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
BlueStarHH

Registriert seit: 28. Mär 2005
Ort: Hannover-Hainholz
801 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Wie gruppiert summieren in Abhängikeit von einem Feld?

  Alt 16. Jul 2016, 19:10
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?

Geändert von BlueStarHH (16. Jul 2016 um 19:18 Uhr)
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#6

AW: Wie gruppiert summieren in Abhängikeit von einem Feld?

  Alt 16. Jul 2016, 19:35
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:
select id1undid2, sum(betrag) from (
       select id1 as id1undid2, betrag from foo
         union all
       select id2, -1*betrag from foo)
 group by id1undid2
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.
Gruß, Jo
  Mit Zitat antworten Zitat
BlueStarHH

Registriert seit: 28. Mär 2005
Ort: Hannover-Hainholz
801 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Wie gruppiert summieren in Abhängikeit von einem Feld?

  Alt 16. Jul 2016, 19:50
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...
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#8

AW: Wie gruppiert summieren in Abhängikeit von einem Feld?

  Alt 16. Jul 2016, 20:24
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.
Gruß, Jo
  Mit Zitat antworten Zitat
BlueStarHH

Registriert seit: 28. Mär 2005
Ort: Hannover-Hainholz
801 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Wie gruppiert summieren in Abhängikeit von einem Feld?

  Alt 16. Jul 2016, 20:49
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:
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
Wenn ich nun auch bar in Zeile 4 durch meinen Tabellennamen "Betraege" gibt es die nächste Fehlermeldung:

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 _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
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...)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#10

AW: Wie gruppiert summieren in Abhängikeit von einem Feld?

  Alt 16. Jul 2016, 21:01
Obwohl ich gerade sehe, dass es bei meinem Statement zu doppelten Zählungen kommen kann.

Ein union ist da unverzichtbar.
SQL-Code:
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
Hier mal ein SQLFiddle dazu
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:21 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz