AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Zwei Tabellen verknüpfen und summieren aber mit NULLs
Thema durchsuchen
Ansicht
Themen-Optionen

Zwei Tabellen verknüpfen und summieren aber mit NULLs

Ein Thema von TurboMagic · begonnen am 17. Nov 2023 · letzter Beitrag vom 22. Nov 2023
Antwort Antwort
Seite 1 von 2  1 2      
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
2.827 Beiträge
 
Delphi 12 Athens
 
#1

Zwei Tabellen verknüpfen und summieren aber mit NULLs

  Alt 17. Nov 2023, 20:35
Datenbank: Firebird • Version: 2.5 • Zugriff über: FireDAC
Hallo,

ich habe ein SQL Problem und noch keine passende Lösung.

Es gibt 2 Tabellen:

Code:
1. BonPos P mit diesen relevanten Spalten:
   KASSENABSCHLUSS_NR, BON_ID, GV_TYP

2. BonPos_Ust PU mit diesen relevanten Spalten:
   Z_KASSE_ID, KASSENABSCHLUSS_NR, BON_ID, POS_BRUTTO
Mein bisheriges SQL Statement:

Code:
 
select pu.KASSENABSCHLUSS_NR, SUM(pu.POS_BRUTTO)
from KASSE_BONPOS_UST pu, KASSE_BONPOS p
where (pu.Z_KASSE_ID = 'MeineKasse') and
      (pu.KASSENABSCHLUSS_NR = p.KASSENABSCHLUSS_NR) and
      (pu.BON_ID = p.BON_ID) and
      (p.GV_TYP = 11)
group by pu.KASSENABSCHLUSS_NR
order by pu.KASSENABSCHLUSS_NR
Das produziert eine Liste aller Bruttosummen aller
Belege die GV_TYP = 11 Buchungen beinhalten.

Das ist zwar schon ganz nett, aber ich bräuchte im Ergebnis für
jede KASSENABSCHLUSS_NR für die es keine GV_TYP = 11 Buchungen
gibt auch einen Eintrag. Die Summe wäre in dem Fall dann 0.

Geht das? Falls ja, wie?

Grüße
TurboMagic
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.024 Beiträge
 
Delphi 12 Athens
 
#2

AW: Zwei Tabellen verknüpfen und summieren aber mit NULLs

  Alt 17. Nov 2023, 21:50
Ohne Testmöglichkeit nur so dahingetippt:
SQL-Code:
select p.KASSENABSCHLUSS_NR, SUM(pu.POS_BRUTTO)
from KASSE_BONPOS p
left join KASSE_BONPOS_UST pu
   on (pu.Z_KASSE_ID = 'MeineKasse') and
      (pu.KASSENABSCHLUSS_NR = p.KASSENABSCHLUSS_NR) and
      (pu.BON_ID = p.BON_ID)
WHERE (p.GV_TYP = 11)
group by p.KASSENABSCHLUSS_NR
order by p.KASSENABSCHLUSS_NR
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
2.827 Beiträge
 
Delphi 12 Athens
 
#3

AW: Zwei Tabellen verknüpfen und summieren aber mit NULLs

  Alt 17. Nov 2023, 22:03
Danke für den netten Versuch, nur leider liefert er nicht das richtige Ergebnis.
Er liefert jetzt alle KASSENABSCHLUSS_NR Zeilen die eine Null Summe produzieren.
Jetzt müssten da noch diejenigen dazwischen, die für GV_TYP = 11 eine Summe > 0
haben...
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.024 Beiträge
 
Delphi 12 Athens
 
#4

AW: Zwei Tabellen verknüpfen und summieren aber mit NULLs

  Alt 17. Nov 2023, 22:29
Ich habe offenbar die Anforderung noch nicht richtig verstanden. Hilfreich wäre hier ein konkretes Beispiel mit dem gewünschten Ergebnis - noch hilfreicher ein Skript um die Tabellen samt Inhalt mit einem Klick zu erzeugen.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
2.827 Beiträge
 
Delphi 12 Athens
 
#5

AW: Zwei Tabellen verknüpfen und summieren aber mit NULLs

  Alt 17. Nov 2023, 22:36
Gewünschte Beispielausgabe:

Code:
KASSENABSCHLUSS_NR SUM
0                   Null
1                   3.000
2                   -1.500
3                   Null
4                   5.000
Hab' leider diesen Tabelle Button noch nicht verstanden.
Der fügt leider keine Beispiel Zeilen Definition ein.

Tabellendefinition ggf. morgen.

Was aber rauskommen soll:

1. Jeweils eine Zeile pro KASSENABSCHLUSS_NR
2. Die enthält entweder Null, wenn es keine Belege mit einer Belegpos für die GV_TYP = 11 gibt
3. Oder falls es solche gibt die Summe dieser
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.431 Beiträge
 
Delphi 7 Professional
 
#6

AW: Zwei Tabellen verknüpfen und summieren aber mit NULLs

  Alt 18. Nov 2023, 01:00
Das könnte durch das Tauschen der Tabellen und Weglassen der Wherebedingung funktionieren:
SQL-Code:
select
  pu.KASSENABSCHLUSS_NR,
  sum(case
        when p.GV_TYP = 11 then pu.POS_BRUTTO -- 3. Oder falls es solche gibt die Summe dieser
        else Null -- 2. Die enthält entweder Null, wenn es keine Belege mit einer Belegpos für die GV_TYP = 11 gibt
      end
     ) as Summe
from KASSE_BONPOS_UST pu
left join KASSE_BONPOS p
  on (pu.Z_KASSE_ID = 'MeineKasse') and
     (pu.KASSENABSCHLUSS_NR = p.KASSENABSCHLUSS_NR) and
     (pu.BON_ID = p.BON_ID)
group by pu.KASSENABSCHLUSS_NR -- 1. Jeweils eine Zeile pro KASSENABSCHLUSS_NR
order by pu.KASSENABSCHLUSS_NR
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
2.827 Beiträge
 
Delphi 12 Athens
 
#7

AW: Zwei Tabellen verknüpfen und summieren aber mit NULLs

  Alt 18. Nov 2023, 08:59
Hallo,

danke für deine Antwort. Die werde ich irgendwann später heute ausprobieren
(jetzt ist erst Mal Gartenarbeit angesagt).

Durch deine Fallunterscheidung sieht die erst Mal sehr vielversprechend aus!

Grüße
TurboMagic
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
2.827 Beiträge
 
Delphi 12 Athens
 
#8

AW: Zwei Tabellen verknüpfen und summieren aber mit NULLs

  Alt 18. Nov 2023, 15:14
Hallo,

erster Test sieht gut aus! Danke!

Grüße

TurboMagic
  Mit Zitat antworten Zitat
Redeemer

Registriert seit: 19. Jan 2009
Ort: Kirchlinteln (LK Verden)
1.018 Beiträge
 
Delphi 2009 Professional
 
#9

AW: Zwei Tabellen verknüpfen und summieren aber mit NULLs

  Alt 20. Nov 2023, 10:10
Aus einer der ersten Vorlesungen Informationssysteme: Man verwendet das (implizite) kartesische Produkt nicht.

(Außer man hat einen sehr guten Grund, kein JOIN zu verwenden.)

Das implizite kartesische Produkt ist das with...-do von SQL: Macht meist mehr Arbeit, als es einem abnimmt.
Janni
2005 PE, 2009 PA, XE2 PA

Geändert von Redeemer (20. Nov 2023 um 10:12 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.167 Beiträge
 
Delphi 12 Athens
 
#10

AW: Zwei Tabellen verknüpfen und summieren aber mit NULLs

  Alt 20. Nov 2023, 10:23
Zitat:
from KASSE_BONPOS_UST pu, KASSE_BONPOS p
Fände es auch schön, wenn man diese grauenhaften impliziten AS deaktivieren könnte.

Ich hatte mal 'nen Fehler gesucht, wo einfach nur ein Komma fehlte und das DBMS sich dann dachte da einfach ein AS rein zu schieben.
Die fehlende Spalte war garnicht aufgefallen, aber wir wunderten uns, warum in der einen Spalte (Feld) Werte drin standen, die da nicht rein gehören.


* Also dieses implizite kartesische Produkt und die impliziten AS verbieten oder zumindestens eine Warnung werfen, würde viele potentielle Fehler verhindern.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  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 20:05 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