2017-02-09 6 views
0

Ich kämpfe mit der IF in der WHERE-Anweisung. Meine Zugriffsabfrage verwendet einen Parameter. Die WHERE-Anweisung sollte nur ausgeführt werden, wenn der Parameter einen Wert hat, andernfalls sollte er ignoriert werden. Das ist es, was ich jetzt:Wenn in WHERE-Anweisung zu viele Datensätze ausschließt (Access)

PARAMETERS varMachineID Text (25); 
SELECT RequestNumber 
FROM Requests 
WHERE (MachineID=IIf([varMachineID]<>"",[varMachineID],MachineID)); 

Diese Aussage sollte gut funktionieren. Die Tabelle kann jedoch auch Datensätze mit einer leeren MachineID enthalten. Mit dieser WHERE-Anweisung werden diese Datensätze jetzt von der Abfrage ausgeschlossen. Dies sollte nicht passieren. Ich habe versucht, eine OR-Anweisung in der ELSE, aber dann wird die Abfrage zu komplex zu handhaben.

Hoffe jemand hat eine Lösung für mich.

Danke.

ps. Dies ist ein abgespecktes Beispiel, die Abfrage, die ich habe, enthält mehr Parameter und mehr Bedingungen in der WHERE-Anweisung.

Antwort

0

Ich vermute, dass "leer" bedeutet NULL. Wenn ja, ich glaube, Sie wollen:

WHERE MachineID = varMachineID or varMachineID is NULL 

Diese alle Datensätze auswählen, wenn varMachineIdNULL ist. Es wählt nur übereinstimmende aus, wenn es nicht NULL ist.

+0

Manchmal kann die Lösung so einfach sein. Vielen Dank! – Karin

0

Es ist wahrscheinlich das Sie brauchen:

WHERE 
    MachineID Is Null Or 
    MachineID = IIf(varMachineID = "", MachineID, varMachineID); 
Verwandte Themen