2009-04-21 13 views
24

¿Se pueden usar las expresiones case en Access? Estoy tratando de determinar la forma de la fecha un máximo de 2 columnas, pero obtengo errores de sintaxis en el código siguiente:Expresiones de casos en 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 

Respuesta

41

Puede utilizar la función IIF() lugar.

IIF(condition, valueiftrue, valueiffalse) 

condition es el valor que desea probar.

valueiftrue es el valor que se devuelve si la condición se evalúa como VERDADERO.

valueiffalse es el valor que se devuelve si la condición se evalúa como FALSA.

+0

pensé que tenía que haber una respuesta verdadera flase de hacer eso? –

+3

"dbo_tbl_property.LASTSERVICEDATE> Contour_dates. [Last CP12 Date]" es su verdadero/falso –

7

No hay ninguna declaración de caso en Access. En su lugar, puede usar la declaración de cambio. Se verá algo como la siguiente:

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])

Para más mirada de lectura en: http://www.techonthenet.com/access/functions/advanced/switch.php

O para el caso del ejemplo de implementación función en VBA:

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

Saludos, J.

+3

La función 'switch' es una función mucho mejor para usar si se evalúan más condiciones múltiples. Será más fácil de leer/comprender/mantener en comparación con el uso de funciones anidadas 'IIF'. Además, una forma alternativa de implementar un valor predeterminado en lugar de crear expresiones lógicas que básicamente evalúan como "todas las expresiones anteriores son falsas", es simplemente usar 'true' como la expresión final a evaluar. Por ejemplo 'switch (dbo_tbl_property.LASTSERVICEDATE> Contour_dates. [Last CP12 Date], dbo_tbl_property.LASTSERVICEDATE, true, Contour_dates. [Last CP12 Date])' –

-2

FWIW - IIF es un arrastre, y la solución de conmutación no parece válida para SQL (es posible que haya hecho algo mal). Entré en los valores que Fionnuala ofreció en una nueva tabla llamada AccessObjectXref:

ID ObjectType ObjectDesc 1 -32768 -32766 Macro Forma 2 3 -32,764 -32,761 Informe 4 Módulo 5 -32,758 -32,757 6 Usuarios DB Documento 7 1 Tabla 8 2 DB 9 3 Container 10 5 consulta 11 8 Hoja secundaria

Entonces utilizó el siguiente SQL para crear una lista de nombres de objetos y sus recuentos. Obviamente se podría incluir todos los registros si quería:

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

Tengo la lista de tipos de objetos a partir de: Meaning of MsysObjects values