/ / Sql Statement CASE Statement - sql, sql-server, tsql

SQL Fallthrough CASE Statement - sql, sql-server, tsql

V C # môžeme písať

switch(num)
{
case 0:
case 1: // do something; break;
case 2:
............
...........
case n: // do something break;
default: //do something; break;
}

Ako môžem dosiahnuť podobné veci v SQL SERVER?

Nehovorím o jednoduchom spôsobe písaniaPRÍPAD v SQL SERVER. Hovorím o tom, či potrebujem vykonať ten istý kráľ prevádzky v 2 alebo viacerých prípadoch ako to, čo som ukázal v úryvku kódu C #, ako robiť podobné veci v CASE SQL?

EDIT:

Dostal som odtiaľto pár pekných odpovedí. Ako môžem previesť nasledujúce položky

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]

... na niečo ako:

SELECT CASE WHEN [A],
CASE WHEN [B],
CASE WHEN [C],
CASE WHEN [D] = num THEN "-" ELSE "" END [A] or [B] or [C] or [D]

V skutočnosti to potrebujem v dotaze PIVOT. Včera som vyriešil problém. Ale nie som presvedčený týmto spôsobom písania. Pretože vždy robím to isté. Takže existuje lepší spôsob, ako to prezentovať?

odpovede:

4 pre odpoveď č. 1

Možno ste to hľadali.

SELECT
CASE
WHEN (num BETWEEN 0 AND 2) THEN "Between 0 and 2"
WHEN (num = 3) THEN "3"
ELSE "Something else"
END
...

Viac informácií o spoločnosti CASE od spoločnosti MSDN.


2 pre odpoveď č. 2

SQL podporuje a CASE vyhlásenie, ale to nie je to isté ako switch príkazy vo vysokých jazykoch ako C # a Java. V prehlásení o prepínači máte koncept prepadu, kde ak a break vyhlásenie sa nenachádza, tok pokračuje k ďalšiemu case, Na rozdiel od toho, SQL CASE vyhlásenie sa správa ako jazyky na vysokej úrovni if(value==1){ ... }else if(value==2){ ... }else{ ... }.


2 pre odpoveď č. 3

Rovnako ako príkaz C # SWITCH, CASE pre SQL Server vyjadrenie robí nie Podporný pád.

Všimnite si dôraz na vyjadrenie - nemá sa používať na kontrolu toku, použite to, čo je tu uvedené.


1 pre odpoveď č. 4

Ako toto:

SELECT
CASE num
WHEN 0 THEN ...
WHEN 1 THEN ...
ELSE ...
END as SomeCol
FROM ...