2009-09-02 26 views
13

tengo una variable llamada @status cual di delante de esta instrucción de selección:¿cómo selecciono una columna según la condición?

Select 
ordr_num as num, 
ordr_date as date, 
ordr_ship_with as shipwith 
From 
order 
where ordr_num = @ordrNum 

sólo desea seleccionar ordr_ship_with columna si @status <> 'Cancelled', de lo contrario desee seleccionar nulo para shipwith. ¿Cómo logro esto?

+0

lo mejor es no almacenar toda la palabra 'cancelado' en una columna de estado. el estado puede ser un char (1) con los valores "C" = cancelado, "O" = abierto, "D" = eliminado, "P" = procesado, etc. –

+0

Acepto. O use un campo 'TinyInt' para que pueda tener muchos más estados y mapas usando una enumeración en el código. – strider

Respuesta

26
SELECT ordr_num as num, ordr_date as date, 
    CASE WHEN @status<>'Cancelled' THEN ordr_ship_with ELSE NULL END as shipwith 
FROM order 
WHERE ordr_num = @ordrNum 
+0

Antes que nada gracias por esta respuesta, me ayudaron mucho. ¿Cómo se puede usar la columna devuelta por CASE WHEN en la condición WHERE? Intenté usar AS T e intentar acceder a T dentro de la sección DONDE, pero sin éxito. Gracias. – Jacob

+1

Tiene que volver a escribirlo, o anidar esta consulta y poner la condición en la sección externa. Sql es tonto de esa manera a veces. –

3

Trate de hacer esto

Select 
    ordr_num as num, 
    ordr_date as date, 
    CASE 
     WHEN @Status <> 'Cancelled' THEN ordr_ship_with 
     ELSE NULL END 
    as shipwith 
From order 
where ordr_num = @ordrNum 

Aunque tengo la sensación de que de estado es una columna en la tabla Order. En ese caso, haga lo siguiente:

Select 
    ordr_num as num, 
    ordr_date as date, 
    CASE 
     WHEN Status <> 'Cancelled' THEN ordr_ship_with 
     ELSE NULL END 
    as shipwith 
From order 
where ordr_num = @ordrNum 
0

SELECT CASE
CUANDO @status <> 'cancelado' ENTONCES ordr_ship_with
ELSE nulos
fin como shipwith, ... otros campos

1
Select 
    ordr_num as num, 
    ordr_date as date, 
    CASE WHEN @status <> 'Cancelled' THEN ordr_ship_with ELSE NULL END as shipwith 
From 
    order where ordr_num = @ordrNum 
Cuestiones relacionadas