2012-12-12 24 views
6

Potrzebuję pomocy w pisaniu instrukcji case dla widoku. Tabela bazowa ma dwie kolumny, do których będę się odwoływać: "Etap" i "Tak".Warunkowa składnia instrukcji CASE

Jeśli kolumna Stage ma wartość 1, a kolumna YesNo ma wartość 1, potrzebuję instrukcji CASE, aby wyświetlić ją w widoku jako "No." Jeśli kolumna Stage ma wartość 1, a kolumna YesNo ma wartość 0, potrzebuję instrukcji CASE, aby wyświetlić ją w widoku jako "Yes". Jeśli kolumna Stage ma wartość 1, a kolumna YesNo ma wartość NULL, potrzebuję instrukcji CASE, aby wyświetlić ją w widoku jako NULL. Jeśli Etap jest inny niż 1, potrzebuję kolumny TakNo do wyświetlenia w widoku jako NULL.

To jest moja logika do tej pory, która moim zdaniem jest poprawna, ale kiedy próbuję ją uruchomić, dostaję błąd składniowy dotyczący słowa "AS". Jakieś sugestie?

CASE 
    WHEN a.Stage = 1 and a.YesorNo = 1 THEN 'No' 
    ELSE WHEN a.Stage = 1 and a.YesorNo = 0 THEN 'Yes' 
END AS NewViewColumn 
+4

mogę tylko powiedz, że posiadanie kolumny "YesOrNo", gdzie 1 oznacza "Nie", powoduje, że trochę płaczę w środku. –

+3

Sugeruję, abyś wziął pod uwagę komentarz Matta i naprawił schemat nazewnictwa/danych. Po pierwsze, w programowaniu jest (prawie?) Uniwersalnie prawdą, że 1 oznacza True, a 0 oznacza Fałsz. Odwracanie jest bardzo dziwne i sprawia, że ​​kod jest znacznie trudniejszy do odczytania i zrozumienia. Po drugie, chociaż nie wspomniałeś swojej nazwy tabeli, "YesOrNo" nie jest bardzo dobrą nazwą kolumny, ponieważ jest to odpowiedź na pytanie, a nie atrybut. Lepszą nazwą byłoby 'IsDeleted' lub' NeedsExpressHandling' lub 'HasPermission' lub coś, co jest oczywiście True/False. – Pondlife

Odpowiedz

6

Usuń ELSE WHEN, jeśli pozostawić ELSE out to powróci null za jakiekolwiek przedmioty nie spełniają pozostałe logicznych:

CASE 
    WHEN a.Stage = 1 and a.YesorNo = 1 THEN 'No' 
    WHEN a.Stage = 1 and a.YesorNo = 0 THEN 'Yes' 
END AS NewViewColumn 

lub użyj:

CASE 
    WHEN a.Stage = 1 and a.YesorNo = 1 THEN 'No' 
    WHEN a.Stage = 1 and a.YesorNo = 0 THEN 'Yes' 
    ELSE 'other' 
END AS NewViewColumn 
+0

Dziękuję bardzo wszystkim, szybko to rozwiązało mój problem. – dp3

1

Używasz ELSE WHEN, powinno to być albo ELSE lub WHEN .. THEN ..:

CASE 
    WHEN a.Stage = 1 and a.YesorNo = 1 THEN 'No' 
    ELSE 'Yes' 
END AS NewViewColumn 

Lub:

CASE 
    WHEN a.Stage = 1 and a.YesorNo = 1 THEN 'No' 
    WHEN a.Stage = 1 and a.YesorNo = 0 THEN 'Yes' 
END AS NewViewColumn 

Zapoznaj się z msdn page on CASE aby uzyskać więcej informacji.

2
CASE 
    WHEN a.Stage = 1 and a.YesorNo = 1 THEN 'No' 
    WHEN a.Stage = 1 and a.YesorNo = 0 THEN 'Yes' 
    ELSE something else -- If you ignored this it will be NULL 
END AS NewViewColumn 
Powiązane problemy