Articles

SQL Case Statement-formulare Simple și căutate

scopul principal al unei expresii SQL CASE returnează o valoare bazată pe unul sau mai multe teste condiționale. Utilizați expresii de caz oriunde într-o declarație SQL expresie este permisă. Deși cu adevărat o expresie, unii oameni se referă la ele ca „declarații de caz.”Acest lucru provine cel mai probabil din utilizarea lor în limbajele de programare.

expresia SQL CASE este extrem de versatilă și utilizată în interogările SQLServer. În special, este utilizat în lista de coloane SELECT, GROUP BY, HAVING și ORDER BY clauze. Expresia cazului standardizează (înfrumusețează) datele sau efectuează verificări pentru a proteja împotriva erorilor, cum ar fi împărțirea la zero.

toate exemplele pentru această lecție se bazează pe Microsoft SQL Server Management Studio și baza de date AdventureWorks2012. Noțiuni de bază folosind SQL Server folosind ghidul meu gratuit și instrumente gratuite Microsoft.

instrucțiuni de caz SQL Server

există două forme pentru clauza de caz: simplu și căutat. Ambele formulare returnează un rezultat bazat pe testarea unei expresii. Deși expresii punct de vedere tehnic, veți vedea mulți oameni se referă la ea ca o declarație.

instrucțiunea simplă SQL CASE este utilizată pentru testele de egalitate. Testează o expresie împotriva mai multor valori, ceea ce îl face excelent pentru transformarea unui set de valori, cum ar fi abrevierile la forma lor lungă corespunzătoare.

instrucțiunea SQL case căutată utilizează un format de evaluare a expresiei mai cuprinzător. Este bine atunci când doriți să lucrați cu intervale de date, cum ar fi intervalele salariale sau vârstele.

vom începe mai întâi cu forma simplă, și apoi acoperă căutat.

expresie de caz formă simplă

forma simplă a expresiei de caz compară rezultatele unei expresii cu o serie de teste și returnează un „rezultat” atunci când „testul” returnează true.

forma generală pentru o expresie de caz simplă este:

CASE expression
WHEN test THEN result

ELSE otherResult
END

instrucțiunea ELSE este opțională într-o expresie de caz. Se întoarce „otherResult” atunci când nu se fac meciuri și altceva este prezent. Dacă nu există altceva în declarația de caz, atunci returnează NULL.

clauza ELSE este o modalitate excelentă de a prinde valori de date proaste sau neașteptate și de a returna un alt rezultat decât NULL.

exemplu de transformare a datelor

există mai multe motive pentru a utiliza o declarație de caz. Primul este transformarea datelor dintr-un set de valori în altul. De exemplu, pentru a afișa sexul unui angajat ca „bărbat” sau „femeie”, atunci când datele dvs. sunt codificate ca „M” sau „F”, utilizați o expresie de caz pentru a testa reprezentarea unui singur caracter și a returna forma lungă corespunzătoare.

exemplul pentru aceasta este:

SELECT JobTitle,
CASE Gender
WHEN 'M' THEN 'Male'
WHEN 'F' THEN 'Female'
ELSE 'Unknown Value'
END
FROM HumanResources.Employee

exemplu de standardizare a datelor

în mod similar, puteți utiliza o clauză de caz simplă pentru a standardiza mai multe valori într-una singură. Extinderea exemplului nostru mapează mai multe variante fie la bărbați, fie la femei:

s-ar putea să vă întrebați dacă puteți crea un alt tabel în baza dvs. de date și să îl utilizați pentru a căuta valorile. Aș tinde să fiu de acord că ar fi cel mai bun, dar în multe situații nu veți avea permisiunea de a crea tabele în baza de date. În acest caz, sunteți lăsat la inteligența dumneavoastră o declarație SELECT oferă.

rezumat

iată câteva lucruri de luat în considerare atunci când se utilizează expresia simplă a cazului:

  • permite doar comparații de egalitate.
  • evaluează testele sunt evaluate în ordinea definită.
  • returnează rezultatul corespunzător primului test adevărat.
  • dacă nu se face nicio potrivire, cazul returnează NULL, cu excepția cazului în care este prezent.

expresia de caz cautat forma

forma de căutare a expresiei de caz permite testarea mai versatil. Utilizați-l pentru a evalua o gamă mai mare de teste. De fapt, orice expresie booleană se califică drept test.

o expresie căutată din caz are acest format

CASE
WHEN booleanExpression THEN result

ELSE otherResult
END

cu formularul căutat, utilizați clauzele WHEN pentru a evalua expresiile booleene. Rezultatul primei expresii booleene adevărate este returnat.

mai jos este forma de caz căutată a exemplului de gen angajat din secțiunea anterioară.

de asemenea, am folosit același exemplu pentru instrucțiunea simplă SQL case. Am făcut asta ca să vezi diferența subtilă. Observați că fiecare clauză WHEN conține acum testul ca expresie booleană.

Compararea formularelor simple și căutate SQL caz

aici sunt declarațiile side-by-side:

simplu versus cautat Expresie caz

tind să folosesc formatul expresiei de caz căutat în toate SQL-urile mele. Acest motiv este simplu, trebuie să-mi amintesc doar un format!

deoarece testăm expresii booleene, Declarația de caz căutată nu se limitează doar la teste de egalitate. Acest lucru face ca această formă să fie foarte bună pentru compararea intervalelor de valori. Poate că managerul de vânzări al Adventure Works dorește să organizeze produse după gama de prețuri. Cum se poate face acest lucru cu SQL?

având în vedere următoarele nume și intervale furnizate de managerul de vânzări, putem construi o expresie de caz pentru a compara prețul listei cu o gamă de valori și apoi a returna numele intervalului de preț corespunzător.

instrucțiunea case este plasată în lista de coloane SELECT și returnează o valoare de caracter. Iată SQL care face truc:

când executați această interogare, veți vedea PriceRange listate și afișarea valorilor în funcție de intervalele specificate în expresia de caz:

rezultate declarație de caz

declarații de caz pot fi, de asemenea fi utilizate pentru a ajuta la prevenirea erorilor. Un bun exemplu este să testați valori valide în expresii, cum ar fi atunci când împărțiți numerele.

luați în considerare

SELECT ProductID,
Name,
ProductNumber,
StandardCost,
ListPrice,
StandardCost / ListPrice as CostOfGoodSold
FROM Production.Product

această declarație returnează mesajul

Divide by zero error encountered.

folosind o clauză de caz, ne putem asigura că nu împărțim accidental la zero.

SELECT ProductID, Name, ProductNumber, StandardCost, ListPrice, CASE WHEN ListPrice = 0 Then NULL ELSE StandardCost / ListPrice END as CostOfGoodSoldFROM Production.Product

o expresie de caz poate fi utilizată oriunde poate fi utilizată o expresie. Aceasta înseamnă că îl puteți utiliza pentru a returna un rezultat al valorii coloanei sau chiar pentru a-l utiliza într-o clauză ORDER BY.

în secțiunea următoare vom explora utilizarea CASE în clauzele ORDER BY și GROUP BY.

expresia cazului în ordine de

continuând cu cererea managerului de vânzări, să presupunem că dorește să vadă și produsele sortate după gama de prețuri și apoi Numele produsului. Am văzut cum putem afișa intervalele de preț ca o coloană, dar cum sortăm?

de fapt, este destul de ușor. Deoarece cazul este o expresie, îl putem folosi ca o dată dintre valorile din care ordonează rezultatele. Amintiți-vă, nu ne limităm doar la sortarea coloanelor de tabel, putem sorta și o expresie.

aici este interogarea pentru a sorta după intervalul de preț.

putem adăuga apoi declarație de caz pentru a selecta lista pentru a afișa, de asemenea, intervalul de preț.după cum vedeți, lucrurile încep să se complice. Vedeți cum se repetă instrucțiunea CASE atât în lista SELECT, cât și în ORDER BY? Din fericire, putem simplifica acest lucru un pic, dar eliminarea Declarației de caz din comandă și înlocuirea acesteia cu numele de alias al expresiei de caz din lista selectată PriceRange ca:

expresia de caz în grup de

acum, că i – am dat managerului de vânzări o listă detaliată, vrea să vadă date sumare-nu se termină niciodată? Din experiența mea, nu, așa că cunoașterea multor SQL pentru a satisface cerințele clienților este cheia succesului.

oricum, vestea bună este că putem folosi expresia de caz pe care am construit-o pentru a crea grupuri sumare. În următorul SQL grupăm datele după PriceRange. Sunt create statistici sumare privind lista minimă, maximă și medieprețul.

spre deosebire de clauza ORDER BY, nu putem face referire la coloana alias PriceRange din grupul by. Întreaga expresie a cazului trebuie repetată. Iată rezultatele interogării noastre:

rezultate – Expresie caz în grup de

Wrap up

după cum puteți vedea, folosind expresii caz adaugă versatilitate la instrucțiunile SQL. Acestea nu numai că vă permit să transformați datele dintr-un set de valori în altul, dar pot fi utilizate și pentru a vă asigura că declarațiile nu returnează erori.

dintre cele două forme, simple și căutate, tind să folosesc formularul de căutare. Motivul este că forma simplă este limitată la teste de egalitate; întrucât, formularul căutat poate face acest lucru și mai mult.

deoarece expresiile de caz sunt expresii și nu declarații sau Clauze, ele pot fi utilizate acolo unde se folosește orice altă expresie. Asta înseamnă că puteți utiliza în întreaga instrucțiune SELECT și în altă parte în SQL.