Seite 1 von 1

Filtern aber 0-Werte behalten

BeitragVerfasst: 18. Aug 2019, 13:56
von Kerstin83
Liebes Forum :P :P

..ich erläutere das an einem Beispiel.

Ich möchte gerne von allen Artikeln wissen, wieviele in einem bestimmten Zeitraum verkauft wurden. Das geht mit einer solchen Abfrage:
Code: Alles auswählen
SELECT ArtID, Sum(Menge)
FROM tblBestellungen LEFT JOIN tblBestellungenPositionen ON tblBestellungen.BestID = tblBestellungenPositionen.BestellID
WHERE blBestellungen.Bestelldatum Between #9/1/2018# And #12/31/2018#
GROUP BY tblBestellungenPositionen.ArtID;

Dann werden aber nur diejenigen Artikel angezeigt, die auch in dem Zeitraum verkauft wurden. Ich möchte gerne, dass in der Liste auch die anderen, in dem Zeitraum nicht verkauften Artikel vorkommen, mit der Menge 0.

Kann man das in einer Query/Abfrage machen ? (mit zwei Abfragen, bei der die zweite die o.g. Abfrage einbindet geht das natürlich).

Liebe Grüße

Kerstin :P

Re: Filtern aber 0-Werte behalten

BeitragVerfasst: 18. Aug 2019, 15:15
von Bitsqueezer
Hallo,

Du gehst ja von den Bestellungen aus, um die ArtID zu ermitteln. Wenn Du als erste Tabelle die Artikelliste verwendest und von da aus einen LEFT JOIN auf die Bestellungen, hast Du alle Artikel und nur die Bestellungen, die für die jeweiligen Artikel existieren.

Mit Nz kannst Du dann aus NULL auch 0 machen.

Gruß

Christian

Re: Filtern aber 0-Werte behalten

BeitragVerfasst: 18. Aug 2019, 18:50
von Gast
Danke.

Bist du dir da ganz sicher ?

Also bei mir werden durch die Bedingung
Code: Alles auswählen
WHERE blBestellungen.Bestelldatum Between #9/1/2018# And #12/31/2018#

alle Artikel rausgefiltert, bei denen keine Bestellung in diesem Zeitraum war. Das ist auch so, wenn ich den Join umdrehe :(

Re: Filtern aber 0-Werte behalten

BeitragVerfasst: 18. Aug 2019, 19:18
von ComputerVersteher
Hi,

das hat er übersehen, aber etwas Eigeninitiative wäre schön ;)
Code: Alles auswählen
SELECT tblArtikel.ArtID
   ,Nz(Bestellt.ArtSumme, 0)
FROM tblArtikel
LEFT JOIN (
   SELECT ArtID
      ,Sum(Menge) AS ArtSumme
   FROM tblBestellungen
   LEFT JOIN tblBestellungenPositionen ON tblBestellungen.BestID = tblBestellungenPositionen.BestellID
   WHERE blBestellungen.Bestelldatum BETWEEN #9 / 1 / 2018 #
         AND #12 / 31 / 2018 #
   GROUP BY tblBestellungenPositionen.ArtID
   ) AS Bestellt ON tblArtikel.ArtID = Bestellt.ArtID;


Gruß CV

Re: Filtern aber 0-Werte behalten

BeitragVerfasst: 19. Aug 2019, 17:46
von Kerstin83
Danke !
Mit der Nz-Funktion hat es geklappt. (War ja dann eigentlch auch schon bei Christian mit dabei, hatte ich nur nicht so wahrgenommen).

Liebe Grüße

Kerstin :P

Re: Filtern aber 0-Werte behalten

BeitragVerfasst: 20. Aug 2019, 08:56
von Gast
Hallo,
ist der SQL-Code von CV schon geordnet geordnet oder kann man ihn wegen der Lesbarkeit besser strukturieren?
Wie müsste man also ihn ggf. hier schreiben??
Gruß Heinz

Re: Filtern aber 0-Werte behalten

BeitragVerfasst: 20. Aug 2019, 10:03
von Gast
Hi Heinz,

das hängt von Deinen persönlichen Vorlieben ab. Ich hab einfach mit Notepas++ und 'Poor Man's T-SQL Plug-in' mit Standard Einstellungen formatiert. Da gibt es aber je nach benutztem Programm/Dienst, jede Menge Einstellungen (z.B. sqlinform).

Alles ist besser als der unformatierte Access SQL-Code.

Gruß CV

Re: Filtern aber 0-Werte behalten

BeitragVerfasst: 20. Aug 2019, 22:35
von Kerstin83
das SQL ist doch gut geordnet und gut lesbar.

Ich habe es aber doch ganz anders gelöst. Einfach mit einer OR-Clause...