W języku C # możemy pisać
switch(num)
{
case 0:
case 1: // do something; break;
case 2:
............
...........
case n: // do something break;
default: //do something; break;
}
Jak mogę osiągnąć podobny rodzaj rzeczy w SQL SERVER?
Nie mówię o prostym sposobie pisaniaCASE w SQL SERVER. Mówię o tym, czy muszę wykonać tego samego króla operacji w 2 lub więcej przypadkach, jak to, co pokazano w C # fragment kodu, jak zrobić podobny rodzaj rzeczy w CASE SQL?
EDYTOWAĆ:
Mam już dobre odpowiedzi z tego miejsca. Jak mogę przekonwertować następujące elementy
SELECT CASE
WHEN [A]= num THEN "-" ELSE "" END [A],
CASE WHEN [B]= num THEN "-" ELSE "" END [B],
CASE WHEN [C]= num THEN "-" ELSE "" END [C],
CASE WHEN [D]= num THEN "-" ELSE "" END [D]
... w coś takiego:
SELECT CASE WHEN [A],
CASE WHEN [B],
CASE WHEN [C],
CASE WHEN [D] = num THEN "-" ELSE "" END [A] or [B] or [C] or [D]
Właściwie potrzebuję tego w zapytaniu PIVOT. Ostatniej nocy rozwiązałem problem. Ale nie przekonuje mnie ten sposób pisania. Bo za każdym razem robię to samo. Czy istnieje lepszy sposób przedstawienia tego?
Odpowiedzi:
4 dla odpowiedzi № 1Być może tego szukasz.
SELECT
CASE
WHEN (num BETWEEN 0 AND 2) THEN "Between 0 and 2"
WHEN (num = 3) THEN "3"
ELSE "Something else"
END
...
Więcej informacji na temat CASE z MSDN.
2 dla odpowiedzi nr 2
SQL obsługuje CASE
oświadczenie, ale to nie jest to samo, co switch
oświadczenie w językach wysokiego poziomu, takich jak C # i Java. W instrukcji switch masz pojęcie fall-through, gdzie jeśli break
nie napotkano instrukcji, przepływ przechodzi do następnego case
. W przeciwieństwie do SQL CASE
oświadczenie zachowuje się jak język wysokiego poziomu if(value==1){ ... }else if(value==2){ ... }else{ ... }
.
2 dla odpowiedzi nr 3
Podobnie jak C # SWITCH instrukcja, CASE serwera SQL wyrażenie robi nie wspierać spadek.
Zwróć uwagę na nacisk wyrażenie - nie należy jej używać do kontroli przepływu, należy używać tego, co jest wymienione tutaj.
1 dla odpowiedzi nr 4
Lubię to:
SELECT
CASE num
WHEN 0 THEN ...
WHEN 1 THEN ...
ELSE ...
END as SomeCol
FROM ...