Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

SQLstring abändern

Begonnen von Beate1953, Mai 28, 2014, 10:28:11

⏪ vorheriges - nächstes ⏩

Beate1953

Hallo,

ich möchte alle Geräte sehen, die bei der vorletzten Inventur ( zwischen VoAnfdat und VoEnddat) in einer bestimmten Abteilung waren (z.B. Abt=7) und bei der letzten Inventur (zwischen LAnfdat und LEnddat) nicht mehr dort sind. Also alle Geräte, die von Abt=7 "weggewandert" sind.

Dazu habe ich folgenden SQLstring:
SQLstr = "SELECT DISTINCT Posten.Barcode, Posten.[Bezeichnung (Typ, genaue Bezeichnung)], Posten.Gerätegruppe, Posten.Standort, "
SQLstr = SQLstr & "Inventur.InvOrt, Inventur.Invdatum FROM Posten LEFT JOIN Inventur ON (Posten.Barcode = Inventur.INVBarcode) "
SQLstr = SQLstr & "WHERE Barcode In (SELECT Barcode FROM QYPoMitInv WHERE Invdatum "
SQLstr = SQLstr & "BETWEEN " & Format(VoAnfdat, "\#yyyy-mm-dd\#") & " AND " & Format(VoEnddat, "\#yyyy-mm-dd\#") & " AND "
SQLstr = SQLstr & "InvOrt= " & Abt & ") "
SQLstr = SQLstr & "AND (InvOrt <> " & Abt & " OR IsNull(InvOrt) OR InvOrt='') AND (Invdatum "
SQLstr = SQLstr & "Between " & Format(LAnfdat, "\#yyyy-mm-dd\#") & " AND " & Format(LEnddat, "\#yyyy-mm-dd\#") & ")"


Access findet korrekt alle Geräte, die in der vorletzten Inventur in Abt 7 waren und in der letzten Inventur in einer anderen Abteilung.

Was er nicht findet - aber finden soll!!! - sind die Geräte, die in der vorletzten Inventur in Abt 7 waren aber in der letzten Inventur gar keinen DS aufweisen (also Geräte, die bei der letzten Inventur vergessen worden sind oder "verschwunden" sind).

Wie muss ich meinen SQLstring dafür abändern?

Vielen Dank im Voraus
Beate1953

MaggieMay

Hallo Beate,

der LEFT JOIN ist schon mal der richtige Ansatz, nur musst du auch bei den Kriterien berücksichtigen, dass die Daten fehlen können.
Versuche es mal hiermit:WHERE
Barcode In (SELECT Barcode FROM QYPoMitInv WHERE [color=red]Invdatum BETWEEN #2012-01-01# AND #2012-12-31# AND InvOrt= 7[/color]) AND
(InvOrt <> 7 OR InvOrt Is Null) AND
(Invdatum Between #2013-01-01# AND #2013-12-31# OR Invdatum Is Null)
Wie mit dem Kriterium in der Unterabfrage umzugehen ist, kann ich nicht beurteilen, da ich die zugrunde liegende Abfrage nicht kenne.
Freundliche Grüße
MaggieMay

Beate1953

Hallo,

vielen Dank für die Antwort. Das mit dem Null hilft, wenn in der letzten Inventur ein Datensatz eingegeben wurde, bei dem im Feld InvOrt nichts steht. Vielen Dank.

Aber das Problem ist, wenn in der letzten Inventur gar kein Datensatz eingegeben wurde. Wie muss ich dafür den SQLstring abändern?

Viele Grüße
Beate1953

MaggieMay

Hallo Beate,

welche Rolle spielt denn die Tabelle "Posten" dabei und wie lautet der Code der Abfrage "QYPoMitInv"?
Freundliche Grüße
MaggieMay