2009-04-21 5 views
24

Können Sie case Ausdrücke in Access verwenden? Ich versuche, die max Datum Form 2 Spalten zu bestimmen, sondern halten Syntaxfehler in den folgenden Code erhalten:Case Ausdrücke in Access

CASE 
    WHEN dbo_tbl_property.LASTSERVICEDATE > Contour_dates.[Last CP12 Date] 
    THEN dbo_tbl_property.LASTSERVICEDATE 
    ELSE Contour_dates.[Last CP12 Date] 
END AS MaxDate 

Antwort

41

Sie die stattdessen IIF() Funktion verwenden können.

IIF(condition, valueiftrue, valueiffalse) 

condition ist der Wert, den Sie testen möchten.

valueiftrue ist der Wert, der zurückgegeben wird, wenn die Bedingung TRUE ergibt.

valueiffalse ist der Wert, der zurückgegeben wird, wenn die Bedingung zu FALSE ausgewertet wird.

+0

Vielleicht haben Sie eine echte flase Antwort gehabt zu haben, das zu tun? –

+3

"dbo_tbl_property.LASTSERVICEDATE> Contour_dates. [Letztes CP12-Datum]" ist Ihr Wahr/Falsch –

7

In Access gibt es keine Fallanweisung. Stattdessen können Sie die switch-Anweisung verwenden. Es wird unten etwas wie das aussehen:

switch(dbo_tbl_property.LASTSERVICEDATE > Contour_dates.[Last CP12 Date],dbo_tbl_property.LASTSERVICEDATE,dbo_tbl_property.LASTSERVICEDATE <= Contour_dates.[Last CP12 Date],Contour_dates.[Last CP12 Date])

Weiterführende Literatur Blick auf: http://www.techonthenet.com/access/functions/advanced/switch.php

Oder Fall Funktion Implementierungsbeispiel in VBA:

http://ewbi.blogs.com/develops/2006/02/adding_case_to_.html

Grüße, J.

+3

Die 'switch' -Funktion ist eine viel bessere Funktion, wenn mehrere weitere Bedingungen ausgewertet werden. Es wird einfacher zu lesen/zu verstehen/beizubehalten verglichen mit der Verwendung von geschachtelten "IIF" -Funktionen. Eine alternative Möglichkeit, einen Standardwert zu implementieren, anstatt einen logischen Ausdruck zu erstellen, der im Grunde "alle vorherigen Ausdrücke sind falsch" lautet, besteht darin, "true" als endgültigen auszuwertenden Ausdruck zu verwenden. Zum Beispiel 'switch (dbo_tbl_property.LASTSERVICEDATE> Contour_dates. [Letztes CP12-Datum], dbo_tbl_property.LASTSERVICEDATE, true, Contour_dates. [Letztes CP12-Datum])' –

-2

FWIW - IIF ist ein Drag, und die Switch-Lösung scheint nicht gültig für SQL (ich habe etwas falsch gemacht). Ich trat in die Werte, die Fionnuala in eine neue Tabelle angeboten namens AccessObjectXref:

ID Object ObjectDesc 1 -32768 Form 2 -32.766 Macro 3 -32.764 Bericht 4 -32.761 -32.758 Modul 5 Benutzer 6 -32757 DB Dokument 7 Tabelle 8 1 2 DB 9 3 Container 10 5 11 8 Abfrageunterdatenblatt

Dann verwendet die folgende SQL eine Liste von Objektnamen und ihre Zählungen zu schaffen. Offensichtlich könnten Sie jeden Datensatz enthalten, wenn man wollte:

SELECT objectdesc, Count(*) AS Expr1 
FROM msysobjects, AccessObjectTypeXref 
where type = objecttype group by objectdesc order by objectdesc 

Ich habe die Liste der Objekttypen aus: Meaning of MsysObjects values