SQL CASE Statement-Simple and search Forms
SQL CASE-lausekkeen päätarkoitus palauttaa arvon, joka perustuu yhteen tai useampaan ehdolliseen testiin. Käytä CASE-lausekkeita missä tahansa SQL-lausekkeen lausekkeessa on sallittua. Vaikka ne ovat todella ilmaus, jotkut kutsuvat niitä ” TAPAUSLAUSUNNOIKSI.”Tämä johtuu todennäköisesti niiden käytöstä ohjelmointikielissä.
SQL: n CASE-lauseke on erittäin monipuolinen ja sitä käytetään SQLServer-kyselyissä. Erityisesti sitä käytetään valitse sarakkeen luettelo, ryhmä, ottaa, ja järjestys lausekkeet. TAPAUSILMAISU myös standardoi (kaunistaa) tietoja tai suorittaa tarkastuksia suojaamaan virheiltä, kuten jakaa nollalla.
Kaikki tämän oppitunnin esimerkit perustuvat Microsoft SQL Server Management studioon ja AdventureWorks2012-tietokantaan. SQL Serverin käytön aloittaminen ilmaisen oppaan ja ilmaisten Microsoft-työkalujen avulla.
SQL Serverin TAPAUSLAUSEKE
TAPAUSLAUSEKKEELLE on kaksi muotoa: yksinkertainen ja etsitty. Molemmat muodot palauttavat tuloksen, joka perustuu lausekkeen testaamiseen. Vaikka teknisesti ilmaisuja, näet monet ihmiset viittaavat siihen julkilausuma.
yksinkertaista SQL-TAPAUSLAUSETTA käytetään tasa-arvotesteissä. Se testaa yhtä lauseketta useita arvoja vastaan, mikä tekee siitä erinomaisen yhden arvokokonaisuuden, kuten lyhenteiden muuntamiseen niiden vastaavaan pitkään muotoon.
haetun SQL: n TAPAUSLAUSEKKEESSA käytetään kattavampaa lausekkeen arviointimuotoa. Se on hyvä, kun haluat työskennellä vaihteluväleillä, kuten palkkahaarukoilla tai iillä.
aloitetaan ensin yksinkertaisella lomakkeella, minkä jälkeen kansi etsitään.
TAPAUSLAUSEKE yksinkertainen muoto
TAPAUSLAUSEKKEEN yksinkertainen muoto vertaa lausekkeen tuloksia testisarjaan ja palauttaa ”tuloksen”, kun ”testi” palauttaa true.
yksinkertaisen muodon TAPAUSLAUSEKKEEN yleinen muoto on:
CASE expression
WHEN test THEN result
…
ELSE otherResult
END
else-lauseke on tapauslausekkeessa valinnainen. Se palauttaa ”otherResult”, kun ei osumia tehdään ja ELSE on läsnä. Jos TAPAUSILMOITUKSESSA ei ole muuta, se palauttaa NULL.
ELSE-lauseke on loistava tapa napata huonot tai yllättävät tietoarvot ja palauttaa muu tulos kuin Noll.
Data Transformation Example
on useita syitä käyttää TAPAUSLAUSEKETTA. Ensimmäinen on tietojen muuttaminen arvokokonaisuudesta toiseen. Esimerkiksi, näyttää työntekijän sukupuoli ” mies ”tai” nainen”, kun tiedot on koodattu” M ”tai” F”, käytä CASE ilmaisu testata yhden merkin edustus ja palauttaa sen vastaava pitkä muoto.
esimerkki tästä on:
SELECT JobTitle,
CASE Gender
WHEN 'M' THEN 'Male'
WHEN 'F' THEN 'Female'
ELSE 'Unknown Value'
END
FROM HumanResources.Employee
tietojen standardointi esimerkki
samoin voidaan käyttää yksinkertaista TAPAUSLAUSEKETTA standardoimaan useita arvoja yhdeksi. Laajennamme esimerkkikarttojamme useisiin variaatioihin joko mieheen tai naiseen:
saatat miettiä, voisitko vain luoda toisen taulukon tietokantaasi ja käyttää sitä arvojen etsimiseen. Olen yleensä samaa mieltä, että olisi paras, mutta monissa tilanteissa sinulla ei ole lupaa luoda taulukoita tietokantaan. Tässä tapauksessa olet jätetty oman järki SELECT statement ’ s tarjoaa.
Yhteenveto
tässä muutamia asioita, jotka kannattaa ottaa huomioon käytettäessä yksinkertaista TAPAUSLAUSEKETTA:
- sallii vain tasa-arvovertailut.
- arvioi testit arvioidaan määritellyssä järjestyksessä.
- palauttaa ensimmäistä tosikoetta vastaavan tuloksen.
- Jos osumaa ei ole, case palauttaa nollan, ellei muita ole paikalla.
CASE-lausekkeen Hakumuoto
CASE-lausekkeen hakumuoto mahdollistaa monipuolisemman testauksen. Käytä sitä arvioida enemmän testejä. Itse asiassa kaikki Boolen ilmaisut kelpaavat kokeeksi.
hakulausekkeella on tämä muoto
CASE
WHEN booleanExpression THEN result
…
ELSE otherResult
END
hakulomakkeella käytetään kun lausekkeita Boolen lausekkeiden arviointiin. Ensimmäisen todellisen Boolen ilmaisun tulos palautuu.
alla on haettu esimerkkitapaus työntekijän sukupuoliesimerkeistä edellisestä osiosta.
käytimme samaa esimerkkiä myös yksinkertaisessa SQL-tapauslauseessa. Tein tämän, jotta näkisit eron. Huomaa, että jokainen WHEN-lauseke sisältää nyt testin Boolen lausekkeena.
yksinkertaisten ja haettujen lomakkeiden Vertailu SQL-tapaukseen
tässä ovat väittämät vierekkäin:
käytän yleensä kaikissa SQL-kielissäni etsittyä lausekemuotoa. Tämä syy on yksinkertainen, minun tarvitsee vain muistaa yksi formaatti!
koska testaamme Boolen lausekkeita, etsitty CASE-lauseke ei rajoitu pelkkiin tasa-arvotesteihin. Tämä tekee tästä lomakkeesta todella hyvän arvojen vaihteluvälien vertailuun. Ehkä Adventure Worksin myyntipäällikkö haluaa järjestää tuotteet hintaluokittain. Miten tämä voitaisiin tehdä SQL?
ottaen huomioon seuraavat myyntipäällikön antamat nimet ja vaihteluvälit, voimme muodostaa TAPAUSILMAISUN, jolla verrataan listahintaa johonkin arvoalueeseen ja sitten palauttaa sopivan hintaluokan nimen.
tapauslauseke on sijoitettu SELECT-sarakelistaan ja palauttaa merkkiarvon. Tässä SQL, joka tekee tempun:
kun suoritat tämän kyselyn, näet Pricerangen listattuna ja näytetään arvot TAPAUSLAUSEKKEESSA määriteltyjen vaihteluvälien mukaisesti:
CASE statements can käytetään myös estämään virheitä. Hyvä esimerkki on testata päteviä arvoja lausekkeissa, kuten Kun jaat numeroita.
harkitse
SELECT ProductID,
Name,
ProductNumber,
StandardCost,
ListPrice,
StandardCost / ListPrice as CostOfGoodSold
FROM Production.Product
tämä toteamus palauttaa viestin
Divide by zero error encountered.
käyttämällä TAPAUSLAUSEKETTA voimme varmistaa, ettemme vahingossa Jaa nollalla.
SELECT ProductID, Name, ProductNumber, StandardCost, ListPrice, CASE WHEN ListPrice = 0 Then NULL ELSE StandardCost / ListPrice END as CostOfGoodSoldFROM Production.Product
TAPAUSLAUSEKETTA voidaan käyttää missä tahansa lauseketta. Tämä tarkoittaa, että voit käyttää sitä palauttaaksesi sarakkeen arvotuloksen tai jopa käyttää sitä järjestyksessä lausekkeittain.
seuraavassa osassa tutkimme tapausta järjestyksessä ja ryhmä lausekkeittain.
CASE expression in ORDER BY
Continuing with the sales manager request, oletetaan, että hän haluaa myös nähdä tuotteet lajiteltuna hintaluokan ja sitten tuotteen nimen mukaan. Olemme nähneet, miten voimme näyttää hintaluokat sarakkeena, mutta miten lajittelemme?
itse asiassa se on aika helppoa. Koska asia on ilmaus, Voimme käyttää sitä kerran arvoista, joista järjestyksessä tulokset. Muista, että emme rajoitu vain lajittelemaan taulukon sarakkeita, voimme myös lajitella ilmaisun.
tässä kysely lajittelee hintaluokan mukaan.
voimme sitten lisätä CASE statement-toiminnon valittuun luetteloon, jotta myös hintaluokka näkyy.
kuten näkyy, asiat alkavat mutkistua. Näetkö, miten TAPAUSILMOITUS toistuu sekä valitussa luettelossa että järjestyksessä? Onneksi voimme yksinkertaistaa tätä hieman, mutta CASE-lausekkeen poistaminen tilauksesta ja sen korvaaminen SELECT list CASE-lausekkeen alias-nimellä PriceRange as so:
CASE expression in GROUP BY
nyt kun olemme antaneet myyntipäällikölle yksityiskohtaisen listauksen, hän haluaa nähdä yhteenvetotiedot-eikö se koskaan pääty? Kokemukseni ei, joten tietäen paljon SQL tyydyttää asiakkaan vaatimukset on avain menestykseen.
joka tapauksessa hyvä uutinen on, että voimme käyttää rakentamaamme CASE-ilmaisua muodostaaksemme yhteenvetoryhmiä. Seuraavassa SQL ryhmittelemme tiedot PriceRange. Luodaan yhteenvetotilastot vähimmäis -, maksimi-ja keskimääräisestä listahinnasta.
toisin kuin järjestys lausekkeessa, emme voi viitata sarakkeeseen alias PriceRange ryhmässä BY. Koko TAPAUSILMAISU on toistettava. Tässä kyselymme tulokset:
Wrap Up
kuten näet, CASE-lausekkeiden käyttäminen lisää monipuolisuutta SQL-lausekkeisiin. Niiden avulla voit muuttaa tietoja yhdestä arvosarjasta toiseen, mutta niitä voidaan myös käyttää varmistamaan, että lausumat eivät palauta virheitä.
kahdesta lomakkeesta, jotka ovat yksinkertaisia ja haettuja, käytän yleensä hakulomaketta. Syynä on se, että yksinkertainen lomake rajoittuu tasa-arvotesteihin, kun taas hakulomake voi tehdä sen ja paljon muuta.
koska TAPAUSLAUSEKKEET ovat lausekkeita eivätkä väittämiä tai lausekkeita, niitä voidaan käyttää missä tahansa muussa lausekkeessa. Tämä tarkoittaa, että voit käyttää koko Valitse lauseke ja muualla SQL.
Leave a Reply