2011-12-16 10 views
7

Esto podría ser una pregunta simple, pero es una que nunca he visto respondida antes. ¿Hay alguna manera de usar la condición de una declaración if como su valor? Esto sería realmente útil en los casos en que se realizan muchos cálculos para determinar si se cumple una determinada condición y, en caso afirmativo, ese cálculo es el resultado.¿Hay alguna manera de usar la condición de una instrucción If como su valor?

A modo de ejemplo:

if ([intense calculation] > 0, [same intense calculation], 0) 

Me interesa sobre todo en lo que respecta a SQL, ya que estoy trabajando en un informe de Access en este momento y por lo tanto no puedo almacenar el resultado de la intensa cálculo una variable.

Respuesta

6

No estoy seguro si existe tal concepto en el mundo informe de MS Access, pero ¿qué tal:

MAX([intense calculation], 0)

La ventaja obvia de este enfoque es que sólo tendría que hacer una vez que el cálculo.

+0

Y si quiere un valor predeterminado en caso de que la variable sea NULL, hay NVL (en Oracle) y, lamentablemente, a todo el mundo le gusta llamar a eso diferente, pero sigue siendo extremadamente útil y creo que cada DBMS tiene algo así. – Voo

+0

y ¿qué ocurre si el valor de intense_calculation es inferior a 0? – mkk

+0

@mkk, el resultado es 0, igual que la declaración IF del póster. –

0

Un enfoque en la mayoría de las formas de SQL sería mover la consulta principal a una sub-consulta, con la columna de cálculo intenso alias y probado en la nueva consulta externa - de este modo:

select v.*, 
     case intense_calc > 0 then intense_calc else 0 end as positive_calc 
from (select [intense calculation] as intense_calc, 
      [other columns] 
     from ...) as v 
+0

Sí, creo que este es el camino a seguir. Estaba pensando en hacerlo de esta manera, pero quería ver si tal vez había alguna sintaxis oscura que no sabía que pudiera hacer referencia a la condición. ¡Gracias! – Will

Cuestiones relacionadas