geschachtelte Abfrage zur Filterung von Datensätzen

Moderator: ModerationP

geschachtelte Abfrage zur Filterung von Datensätzen

Beitragvon Jens99 » 19. Jan 2018, 15:43

Hallo allerseits,

ich habe folgendes Problem und habe keine Idee, wie ich das lösen kann (betrifft Access 2010):

ich habe eine Tabelle tbl_Mappe, in der ich u.a eine Positionsnummer habe. Dann habe ich eine Tabelle tbl_Position, in der ich die Details habe. Hier ist das Feld Belegdatum interessant. Auf einer Positionsnummer werden mehrere Belegnummern erzeugt und dabei ein Belegdatum hinterlegt. Es kommt vor, dass in der Tabelle tbl_Position bis zu 12 Datensätze sind.

Nun das Problem: ich möchte gerne, sobald auf einer Positionsnummer alle Belegnummern erzeugt wurden, eine Liste ausgeben, die mir die Positionsnummern zeigt, damit ich die entsprechenden Mappen raussuchen kann.

Mein Gedanke war nun, eine Abfrage zu erstellen, die mir alle Positionsnummern raussucht, in denen in den letzten 7 Tagen ein Belegdatum gesetzt wurde.

SELECT tbl_Mappe.PositionsNr, tbl_Position.Belegdatum
FROM tbl_Mappe INNER JOIN tbl_Position ON tbl_Mappe.PositionsNr = tbl_Position.MappenRef
WHERE (((Year([Belegdatum])*53+DatePart("ww",[Belegdatum]))=Year(Date())*53+DatePart("ww",Date())-1))
ORDER BY tbl_Mappe.PositionsNr DESC;


Das funktioniert auch. Allerdings finde ich jetzt keinen Weg, jetzt die Positionsnummern so zu begrenzen, dass er mir nur die vollständigen Positionen ausgibt.

Leider bastel ich schon etwas länger an dieser Geschichte rum, kann das Ergebnis beschreiben, aber Access nicht erklären, was es machen soll, um das Ergebnis zu erreichen.
Vielen Dank schon einmal für Ideen.

Schönen Tag noch.

Jens
Jens99
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 20
Registriert: 15. Apr 2013, 15:27

Re: geschachtelte Abfrage zur Filterung von Datensätzen

Beitragvon Nouba » 19. Jan 2018, 16:08

Ich als Außenstehender habe keinen blassen Schimmer, wie sich vollstängige Positionen definieren? Vielleicht zeigst Du einige Spieldaten in Textform, damit das Vertändnis für die Anforderung wächst.
mit freundlichen Grüssen Nouba

Wenn beim Lesen eines Beitrags der Eindruck entsteht, dass sich der Fragesteller wenig Mühe gegeben hat, so erhöht das nicht unbedingt die Motivation, eine Antwort zu verfassen.
Nouba
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 17106
Registriert: 13. Mär 2006, 12:55
Wohnort: Berlin

Re: geschachtelte Abfrage zur Filterung von Datensätzen

Beitragvon Jens99 » 19. Jan 2018, 16:16

Kein Problem.

In der tbl_Mappe habe ich 3 Felder: Positionsnummer (z.B. 180000), Relation (z.B. 20) und das Datum (Erfassungsdatum).
In der tbl_Position sind alle Angaben zu der Rechnung, wie z.B. Preis, MwSt, Belegnummer, Belegdatum usw.

Wichtig hier sind aber nur die Positionsnummer aus tbl_Mappe und das Belegdatum aus tbl_Position, da ich nur über das Belegdatum oder über die Belegnummer herausfinden kann, ob alle Belege einer Position gedruckt wurden und damit die Positionsnummer abgearbeitet wurde und dann abgelegt werden kann. Ich habe mich für das Belegdatum entschieden, da ich dieses eh benötige, um eine Zeitliche Auswahl treffen zu können.
Jens99
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 20
Registriert: 15. Apr 2013, 15:27

Re: geschachtelte Abfrage zur Filterung von Datensätzen

Beitragvon Nouba » 19. Jan 2018, 16:25

Ich verstehe leider Deine Schilderung nicht. Wie definiert sich eine komplette Position?
mit freundlichen Grüssen Nouba

Wenn beim Lesen eines Beitrags der Eindruck entsteht, dass sich der Fragesteller wenig Mühe gegeben hat, so erhöht das nicht unbedingt die Motivation, eine Antwort zu verfassen.
Nouba
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 17106
Registriert: 13. Mär 2006, 12:55
Wohnort: Berlin

Re: geschachtelte Abfrage zur Filterung von Datensätzen

Beitragvon Jens99 » 19. Jan 2018, 16:35

Ich habe eine Positionsnummer (z.B.180000) in der tbl_Mappe. Auf diese Position werden mehrere Vorgänge mit entsprechenden Rechnungen und Gutschriften erfasst. Diese Einzelpositionen sind in der tbl_Position erfasst. Hier besteht eine Verküpfung der beiden Tabellen. Bei der Bearbeitung einzelner Vorgänge wird dann eine Rechnung oder eine Gutschrift erzeugt und die Nummer und das Datum entsprechend in der Tabelle eingetragen.

Hilft Dir das weiter?
Jens99
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 20
Registriert: 15. Apr 2013, 15:27

Re: geschachtelte Abfrage zur Filterung von Datensätzen

Beitragvon Nouba » 19. Jan 2018, 16:51

Jens, ich gehe vom ersten Posting aus.

Jens99 hat geschrieben:Das funktioniert auch. Allerdings finde ich jetzt keinen Weg, jetzt die Positionsnummern so zu begrenzen, dass er mir nur die vollständigen Positionen ausgibt.
Mir mangelt es an Verständnis, wie sich vollständige Positionen definieren.

Du kannst ja einmal in Textform untereinander Datensätze einer unvollständigen Position und dazu gegenübergestellt Datensätze einer vollständigen Position aufzeigen - vielleicht fällt bei mir dann auch der Grosschen.
mit freundlichen Grüssen Nouba

Wenn beim Lesen eines Beitrags der Eindruck entsteht, dass sich der Fragesteller wenig Mühe gegeben hat, so erhöht das nicht unbedingt die Motivation, eine Antwort zu verfassen.
Nouba
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 17106
Registriert: 13. Mär 2006, 12:55
Wohnort: Berlin

Re: geschachtelte Abfrage zur Filterung von Datensätzen

Beitragvon Jens99 » 19. Jan 2018, 17:02

Jetzt verstehe ich "vollständige " Position. Vollständige Position bedeutet nur, dass bei einer Position (z.B. 180000) mit z.B. 12 Vorgängen alle Felder "Belegdatum" gefüllt sind. Mit anderen Worten: alle Belegdaten wurden eingegeben, keins fehlt mehr.

Positionsnummer Belegnummer Belegdatum
180000 10000 19.01.2018 vollständig
180000 10001 19.01.2018 vollständig
180000 10002 12.01.2018 vollständig
180000 10003 01.01.2018 vollständig

180001 10004 02.01.2018 vollständig
180001 noch nicht vollständig
180001 noch nicht vollständig

Bei den letzten beiden Vorgängen wurden noch keine Belege gedruckt.
Jens99
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 20
Registriert: 15. Apr 2013, 15:27

Re: geschachtelte Abfrage zur Filterung von Datensätzen

Beitragvon Nouba » 19. Jan 2018, 18:00

Jetzt ist der Groschen auch bei mir gefallen. :)
Code: Alles auswählen
SELECT PositionsNr,
       Belegdatum
FROM   tbl_Mappe m
       INNER JOIN tbl_Position p
               ON m.PositionsNr = p.MappenRef
WHERE  Belegdatum >= Date() - Weekday(Date() - 1, 2) AND
       NOT EXISTS
           ( SELECT *
             FROM   tbl_Position
             WHERE  MappenRef = p.MappenRef AND
                    Belegdatum IS NULL )
ORDER  BY 1 DESC;

Der Ausdruck Date() - Weekday(Date() - 1, 2) bestimmt den vorangegangenen Montag und könnte, falls Belegdatum indexiert ist, diesen Index auch nutzen. Ich unterstelle auch, dass keine Zukunftsbelege eingetragen sind - sonst müsste auch noch eine Obergrenze für Belegdatum bestimmt werden.

In der Unterabfrage wird nachgesehen, ob es Datensätze mit unausgefülltem Belegdatum für eine MappenRef gibt. Ist das nicht der Fall, sollte die Position vollständig sein.
mit freundlichen Grüssen Nouba

Wenn beim Lesen eines Beitrags der Eindruck entsteht, dass sich der Fragesteller wenig Mühe gegeben hat, so erhöht das nicht unbedingt die Motivation, eine Antwort zu verfassen.
Nouba
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 17106
Registriert: 13. Mär 2006, 12:55
Wohnort: Berlin

Re: geschachtelte Abfrage zur Filterung von Datensätzen

Beitragvon Jens99 » 22. Jan 2018, 08:58

Vielen Dank für Deine Antwort. Ich bastel das heute Mittag mal rein und melde mich.
Jens99
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 20
Registriert: 15. Apr 2013, 15:27

Re: geschachtelte Abfrage zur Filterung von Datensätzen

Beitragvon Jens99 » 22. Jan 2018, 13:37

SUPER, vielen Dank. Einfach einkopiert, die Datumsformel angepasst, Bericht erstellt und läuft!!!
Das war klasse!!

Schönen Tag noch.

Jens
Jens99
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 20
Registriert: 15. Apr 2013, 15:27

Re: geschachtelte Abfrage zur Filterung von Datensätzen

Beitragvon Marmeladenglas » 22. Jan 2018, 14:17

Code: Alles auswählen
 NOT EXISTS
           ( SELECT *..

Da EXISTS nur True oder False zurückgibt, reicht ein
Code: Alles auswählen
SELECT NULL ....
Marmeladenglas
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 16614
Registriert: 23. Jan 2008, 18:55

Re: geschachtelte Abfrage zur Filterung von Datensätzen

Beitragvon Nouba » 22. Jan 2018, 14:37

Es ist total Wurst, was man in der Feldliste, die nur der Syntax wegen einen Platzhalter benötigt, hinterlegt. Es hat keinerlei Auswirkung auf die Performance.
mit freundlichen Grüssen Nouba

Wenn beim Lesen eines Beitrags der Eindruck entsteht, dass sich der Fragesteller wenig Mühe gegeben hat, so erhöht das nicht unbedingt die Motivation, eine Antwort zu verfassen.
Nouba
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 17106
Registriert: 13. Mär 2006, 12:55
Wohnort: Berlin


Zurück zu Access Forum (provisorisch)

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 10 Gäste