/ / SQL's Fallthrough CASE Instrukcja - sql, sql-server, tsql

SQL's Fallthrough CASE Instrukcja - sql, sql-server, tsql

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 № 1

Być 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 ...