![]() |
Datenbank: Firebird • Version: 2.5 • Zugriff über: FireDAC
Zwei Tabellen verknüpfen und summieren aber mit NULLs
Hallo,
ich habe ein SQL Problem und noch keine passende Lösung. Es gibt 2 Tabellen:
Code:
Mein bisheriges SQL Statement:
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
Code:
Das produziert eine Liste aller Bruttosummen allerselect 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 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 |
AW: Zwei Tabellen verknüpfen und summieren aber mit NULLs
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 |
AW: Zwei Tabellen verknüpfen und summieren aber mit NULLs
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... |
AW: Zwei Tabellen verknüpfen und summieren aber mit NULLs
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.
|
AW: Zwei Tabellen verknüpfen und summieren aber mit NULLs
Gewünschte Beispielausgabe:
Code:
Hab' leider diesen Tabelle Button noch nicht verstanden.
KASSENABSCHLUSS_NR SUM
0 Null 1 3.000 2 -1.500 3 Null 4 5.000 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 |
AW: Zwei Tabellen verknüpfen und summieren aber mit NULLs
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 |
AW: Zwei Tabellen verknüpfen und summieren aber mit NULLs
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 |
AW: Zwei Tabellen verknüpfen und summieren aber mit NULLs
Hallo,
erster Test sieht gut aus! Danke! Grüße TurboMagic |
AW: Zwei Tabellen verknüpfen und summieren aber mit NULLs
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. |
AW: Zwei Tabellen verknüpfen und summieren aber mit NULLs
Zitat:
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. |
AW: Zwei Tabellen verknüpfen und summieren aber mit NULLs
Die Auswertung scheint sich auf eine ganz bestimmte Kasse zu beziehen.
Dann gehört (pu.Z_KASSE_ID = 'MeineKasse') in die where-Klausel. |
AW: Zwei Tabellen verknüpfen und summieren aber mit NULLs
so?
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 ( select KASSENABSCHLUSS_NR, BON_ID, POS_BRUTTO from KASSE_BONPOS_UST where pu.Z_KASSE_ID = 'MeineKasse' -- 0. Wir wollen nur diese Kasse auswerten, hier dürfte das Ergebnis genau ein Datensatz sein. ) pu left join KASSE_BONPOS p on (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 |
AW: Zwei Tabellen verknüpfen und summieren aber mit NULLs
Zitat:
|
AW: Zwei Tabellen verknüpfen und summieren aber mit NULLs
Zitat:
SQL-Code:
So besser?
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 ( select KASSENABSCHLUSS_NR, BON_ID, POS_BRUTTO from KASSE_BONPOS_UST where Z_KASSE_ID = 'MeineKasse' -- 0. Wir wollen nur diese Kasse auswerten, hier dürfte das Ergebnis genau ein Datensatz sein. ) pu left join KASSE_BONPOS p on (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 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:54 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 by Thomas Breitkreuz