AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Problem mit Group by in Access
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit Group by in Access

Ein Thema von Luckner · begonnen am 24. Mai 2019 · letzter Beitrag vom 5. Jun 2019
 
Delphi.Narium

Registriert seit: 27. Nov 2017
2.558 Beiträge
 
Delphi 7 Professional
 
#21

AW: Problem mit Group by in Access

  Alt 24. Mai 2019, 18:08
Ausgangs-SQL:
SQL-Code:
SELECT
  Materialrollen.[Mat-Nr],
  Materialrollen.Rollennummer,
  Materialrollen.DatumAb,
  Rollenlager.Lagerplatz,
  Rollenlager.Rollennummer
FROM Materialrollen
LEFT JOIN Rollenlager
  ON Rollenlager.Rollennummer = Materialrollen.Rollennummer
where Materialrollen.[Mat-Nr] = :MatNr
and Materialrollen.DatumAb is NULL
Zitat:
Ich möchte jedoch nur die Lagerplätze anzeigen lassen, ...
SQL-Code:
SELECT
  Rollenlager.Lagerplatz
FROM Materialrollen
LEFT JOIN Rollenlager
  ON Rollenlager.Rollennummer = Materialrollen.Rollennummer
where Materialrollen.[Mat-Nr] = :MatNr
and Materialrollen.DatumAb is NULL
Zitat:
jedoch gruppiert.
SQL-Code:
SELECT
  Rollenlager.Lagerplatz
FROM Materialrollen
LEFT JOIN Rollenlager
  ON Rollenlager.Rollennummer = Materialrollen.Rollennummer
where Materialrollen.[Mat-Nr] = :MatNr
and Materialrollen.DatumAb is NULL
group by
  Rollenlager.Lagerplatz
Zitat:
Wenn mehrere Artikel auf einem Platz liegen, dann brauche ich nur einmal diesen Platzangezeigt.
Einfachste Methode das zu erreichen:

Was nicht gebraucht wird, wird auch nicht ausgegeben, dann stört es auch nicht im Group by und "verstrubbelt" damit auch nicht das Ergebnis.

Und:

Nicht alles, was in der Wherebedingung benötigt wird, muss auch im Select aufgeführt werden, dort wird nur das aufgeführt, was in der Ausgabe tatsächlich benötigt wird.

Alles was im Ergebnis benötigt wird, also zwischen Select und from steht, muss auch im Group by berücksichtigt werden, sofern es nicht über eine Aggregatfunktion verarbeitet wird, sei es nun Min oder Max oder Avg oder ...

Dashier ginge z. B.:
SQL-Code:
SELECT
  Count(*) as Anzahl,
  Rollenlager.Lagerplatz
FROM Materialrollen
LEFT JOIN Rollenlager
  ON Rollenlager.Rollennummer = Materialrollen.Rollennummer
where Materialrollen.[Mat-Nr] = :MatNr
and Materialrollen.DatumAb is NULL
group by
  Rollenlager.Lagerplatz
Wir erfahren damit nicht nur, welche Lagerplätze von der Where-Bedingung betroffen sind, sondern auch, wie oft jeder Lagerplatz betroffen / belegt ... was auch immer ist,

Oder dashier, was zu einem "erweiteren" Ergebnis führt und einem mehrfachen Aufführen des Lagerplatzes:
SQL-Code:
SELECT
  Count(*) as Anzahl,
  Rollenlager.Lagerplatz,
  Materialrollen.[Mat-Nr]
FROM Materialrollen
LEFT JOIN Rollenlager
  ON Rollenlager.Rollennummer = Materialrollen.Rollennummer
where Materialrollen.[Mat-Nr] = :MatNr
and Materialrollen.DatumAb is NULL
group by
  Rollenlager.Lagerplatz,
  Materialrollen.[Mat-Nr]
Hiermit erfahren wir, wieviele Exemplare jeder gefundenenen Mat-Nr auf einem Lagerplatz liegen. Das heißt: Was zusätzlich im Select erscheint und nicht über eine Aggregatfunktion "gebündelt / zusammengefasst " wird, muss auch zwingend im Group by erscheinen.

Wenn eventuell für das praktische Leben auch sinnfrei:
SQL-Code:
SELECT
  Count(*) as Anzahl,
  Rollenlager.Lagerplatz,
  Max(Materialrollen.[Mat-Nr]) as MatNr
FROM Materialrollen
LEFT JOIN Rollenlager
  ON Rollenlager.Rollennummer = Materialrollen.Rollennummer
where Materialrollen.[Mat-Nr] = :MatNr
and Materialrollen.DatumAb is NULL
group by
  Rollenlager.Lagerplatz
Hier erfahen wir, wie oft ein Lagerplatz betroffen ist und die höchste dort vorzufindende Matrialnummer.
  Mit Zitat antworten Zitat
 


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:42 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