2009-09-02 11 views
13

Mam zmienną o nazwie @status które postawił przed tym select:Jak wybrać kolumnę na podstawie warunku?

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

Chcę tylko zaznaczyć ordr_ship_with kolumnę jeśli @status <> 'Cancelled', inaczej chcę wybrać null dla shipwith. Jak to zrobić?

+0

Najlepiej nie przechowywać całego słowa "Anulowane" w kolumnie statusu. status może być char (1) z wartością "C" = anulowany, "O" = otwarty, "D" = usunięty, "P" = przetworzony itp. –

+0

Zgadzam się. Lub użyj pola 'TinyInt', dzięki czemu możesz mieć wiele więcej statusów i map używając wyliczenia w kodzie. – strider

Odpowiedz

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

Przede wszystkim dziękuję za tę odpowiedź, bardzo mi pomogłeś. Jak korzystać z kolumny zwróconej przez CASE WHEN w stanie WHERE? Próbowałem użyć AS T i próbowałem uzyskać dostęp do T w sekcji WHERE, ale bez powodzenia. Dziękuję Ci. – Jacob

+1

Musisz go ponownie wpisać lub zagnieździć to zapytanie i umieścić warunek w zewnętrznej sekcji. Sql czasami jest głupi. –

3

Spróbuj tego

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 

Choć mam wrażenie, że status jest rzeczywisty kolumna w tabeli Zamówienia. W takim przypadku to zrobić:

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
KIEDY @status <> 'odwołany' THEN ordr_ship_with
ELSE NULL
koniec, jak shipwith ... inne pola

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 
Powiązane problemy