2009-09-02 14 views
13

Ho una variabile chiamata @status che ho impostato prima di questa dichiarazione prescelta:come selezionare una colonna in base alle condizioni?

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

voglio solo selezionare ordr_ship_with colonna se @status <> 'Cancelled', altrimenti voglio selezionare nullo per shipwith. Come posso realizzare questo?

+0

è preferibile non memorizzare l'intera parola "Annullato" in una colonna di stato. lo stato può essere un carattere (1) con valori "C" = annullato, "O" = aperto, "D" = eliminato, "P" = elaborato, ecc. –

+0

Accetto. Oppure usa un campo 'TinyInt' in modo che tu possa avere molti più status e mappe usando un enum nel codice. – strider

risposta

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

Prima di tutto grazie per questa risposta, mi ha aiutato molto. Come si può utilizzare la colonna restituita da CASE WHEN sulla condizione WHERE? Ho provato ad usare AS T e provare ad accedere a T nella sezione WHERE ma senza successo. Grazie. – Jacob

+1

Devi ridigitarlo o annidare questa query e inserire la condizione nella sezione esterna. Sql è stupido a volte. –

3

Prova questo

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 

Anche se ho la sensazione che lo stato è una colonna dello tabella Order. In questo caso, fare questo:

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
QUANDO @status <> 'annullato' ALLORA ordr_ship_with
ELSE nulli
finale come shipwith, ... altri campi

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 
Problemi correlati