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ď č. 1Mož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 ...