Articles

SQL CASE Statement-eenvoudige en gezochte formulieren

het belangrijkste doel van een SQL CASE-expressie retourneert een waarde op basis van een of meer voorwaardelijke tests. Use CASE expressions overal in een SQL statement expressie is toegestaan. Hoewel echt een uitdrukking, sommige mensen verwijzen naar hen als ” CASE statements.”Dit komt waarschijnlijk voort uit het gebruik ervan in programmeertalen.

De SQL CASE-expressie is extreem veelzijdig en wordt gebruikt in SQLServer queries. In het bijzonder wordt het gebruikt in de lijst Selecteer kolom, groeperen op, hebben, en volgorde op clausules. De CASE expression standaardiseert ook (verfraaiing) gegevens of voert controles uit om te beschermen tegen fouten, zoals delen door nul.

alle voorbeelden voor deze les zijn gebaseerd op Microsoft SQL Server Management Studio en de AdventureWorks2012 database. Aan de slag met SQL Server met behulp van mijn gratis gids en gratis Microsoft tools.

SQL Server CASE Statement

Er zijn twee vormen voor de CASE-clausule: eenvoudig en gezocht. Beide vormen retourneren een resultaat op basis van het testen van een expressie. Hoewel technisch expressies, zie je veel mensen verwijzen naar het als een verklaring.

het eenvoudige SQL-statement wordt gebruikt voor gelijkheidstests. Het test een uitdrukking tegen meerdere waarden, Dit maakt het geweldig voor het transformeren van een set van waarden, zoals afkortingen naar hun overeenkomstige lange vorm.

het gezochte SQL-statement gebruikt een uitgebreider uitdrukkingsevaluatieformaat. Het is goed als je wilt werken met gegevensreeksen, zoals salarisreeksen of leeftijden.

we beginnen eerst met het eenvoudige formulier, en dan zoeken we naar dekking.

CASE expression Simple Form

De eenvoudige vorm van de CASE expression vergelijkt de resultaten van een expressie met een reeks tests en geeft een “resultaat” terug wanneer de “test” true retourneert.

de algemene vorm voor een eenvoudige vorm GEVALUITDRUKKING is:

CASE expression
WHEN test THEN result

ELSE otherResult
END

het else statement is optioneel in een GEVALUITDRUKKING. Het geeft “otherResult” terug als er geen overeenkomsten zijn gemaakt en ELSE aanwezig is. Als er niets anders in de case statement, dan geeft het NULL.

De else-clausule is een geweldige manier om slechte of onverwachte gegevenswaarden te vangen en een ander resultaat dan NULL te retourneren.

gegevenstransformatie voorbeeld

Er zijn verschillende redenen om een CASE statement te gebruiken. De eerste is om gegevens te transformeren van de ene set van waarden naar de andere. Bijvoorbeeld, om het geslacht van een werknemer weer te geven als ” man “of” vrouw, “wanneer uw gegevens zijn gecodeerd als” M “of” F, gebruik een CASE expressie om te testen voor de enkele karakter vertegenwoordiging en retourneren de bijbehorende lange vorm.

het voorbeeld hiervoor is:

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

Gegevensstandaardisatie voorbeeld

Op dezelfde manier kunt u een eenvoudige case-clausule gebruiken om meerdere waarden in één te standaardiseren. Het uitbreiden van ons voorbeeld geeft verschillende variaties aan zowel man als vrouw:

u vraagt zich misschien af of u gewoon een andere tabel in uw database kunt maken en die kunt gebruiken om de waarden op te zoeken. Ik ben het er meestal mee eens dat dat het beste zou zijn, maar in veel situaties heb je geen toestemming om tabellen in de database aan te maken. In dit geval bent u links naar uw verstand een SELECT statement ‘ s biedt.

samenvatting

Hier zijn enkele dingen om rekening mee te houden bij het gebruik van de eenvoudige GEVALSUITDRUKKING:

  • staat alleen gelijkheidsvergelijkingen toe.
  • evalueert tests worden geëvalueerd in de gedefinieerde volgorde.
  • geeft het resultaat terug dat overeenkomt met de eerste TRUE test.
  • als er geen overeenkomst is gemaakt, geeft case NULL terug, tenzij anders aanwezig is.

GEVALUITDRUKKING gezocht formulier

De zoekvorm van de GEVALUITDRUKKING maakt het mogelijk om veelzijdiger te testen. Gebruik het om een groter aantal tests te evalueren. In feite, elke Booleaanse uitdrukking kwalificeert als een test.

een uit hoofdletters gezochte uitdrukking heeft dit formaat

CASE
WHEN booleanExpression THEN result

ELSE otherResult
END

met het gezochte formulier, gebruik WHEN-clausules om Booleaanse uitdrukkingen te evalueren. Het resultaat van de eerste ware Booleaanse uitdrukking wordt teruggegeven.

hieronder vindt u de Gevalvorm van het voorbeeld van het geslacht van de werknemer uit de vorige sectie.

we hebben dit voorbeeld ook gebruikt voor het eenvoudige SQL case statement. Ik deed dit zodat je het subtiele verschil kon zien. Merk op dat elke wanneer-clausule nu de test bevat als een Booleaanse uitdrukking.

Vergelijking van Eenvoudige en Zocht Vormen SQL CASE

Hier zijn de instructies side-by-side:

Eenvoudige versus Gezocht CASE-expressie

ik gebruik meestal de gezochte CASE-expressie formaat in al mijn SQL. Deze reden is eenvoudig, Ik hoef maar één formaat te onthouden!

omdat we Booleaanse uitdrukkingen testen, is het gezochte geval statement niet beperkt tot alleen gelijkheidstests. Dit maakt deze vorm echt goed voor het vergelijken van bereiken van waarden. Misschien wil de sales manager van Adventure Works producten op prijsklasse organiseren. Hoe kan dit gedaan worden met SQL?

gegeven de volgende namen en bereiken die door de verkoopmanager worden verstrekt, kunnen we een GEVALUITDRUKKING construeren om de lijstprijs te vergelijken met een reeks waarden en vervolgens de juiste naam van het prijsklasse te retourneren.

het statement met hoofdletters wordt geplaatst in de lijst met geselecteerde kolommen en geeft een tekenwaarde terug. Hier is de SQL die de truc doet:

wanneer u deze query uitvoert, zult u PriceRange weergegeven en waarden weergeven volgens de bereiken die zijn opgegeven in de CASE expressie:

CASE Statement Results

CASE statements kunnen ook worden gebruikt om fouten te voorkomen. Een goed voorbeeld is om te testen op geldige waarden binnen expressies, zoals wanneer u getallen deelt.

overweeg

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

Dit statement retourneert het bericht

Divide by zero error encountered.

door een CASE-clausule te gebruiken kunnen we ervoor zorgen dat we niet per ongeluk door nul delen.

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

een GEVALUITDRUKKING kan worden gebruikt waar een uitdrukking kan worden gebruikt. Dit betekent dat u het kunt gebruiken om een kolomwaarde-resultaat te retourneren of het zelfs kunt gebruiken in een volgorde per clausule.

in de volgende sectie zullen we het gebruik van hoofdletters onderzoeken in de volgorde van en groeperen op clausules.

CASE-expressie in volgorde van

doorgaan met het verzoek van de sales manager, Stel dat ze ook de producten wil zien gesorteerd op prijsklasse en vervolgens Productnaam. We hebben gezien hoe we de prijsklassen als kolom kunnen weergeven, maar hoe Sorteren we?

eigenlijk is het vrij eenvoudig. Omdat CASE een uitdrukking is, kunnen we het gebruiken als een van de waarden van waaruit de resultaten worden gerangschikt. Vergeet niet dat we niet beperkt zijn tot alleen het sorteren van tabelkolommen, we kunnen ook een uitdrukking Sorteren.

Hier is de zoekopdracht om te sorteren op de prijsklasse.

We kunnen dan CASE statement toevoegen aan de lijst selecteren om ook de prijsklasse weer te geven.

zoals je kunt zien, beginnen dingen ingewikkeld te worden. Zie je hoe de CASE statement herhaald wordt in zowel de SELECT list als de ORDER BY? Gelukkig kunnen we dit een beetje vereenvoudigen, maar het verwijderen van de CASE statement uit de volgorde door en het vervangen door de Select list CASE expression ‘ s alias naam PriceRange als zo:

CASE expression in GROUP BY

nu dat we de sales manager een gedetailleerde lijst hebben gegeven die ze wil samenvattende gegevens zien-houdt het nooit op? In mijn ervaring is het niet, dus het kennen van veel SQL om de eisen van de klant te bevredigen is uw sleutel tot succes.

hoe dan ook, het goede nieuws is dat we de HOOFDLETTERUITDRUKKING kunnen gebruiken die we hebben gemaakt om samenvattingsgroepen aan te maken. In de volgende SQL groeperen we de gegevens op PriceRange. Beknopte statistieken over de minimum, maximum en gemiddelde lijstprijs worden gemaakt.

In tegenstelling tot de ORDER BY clausule, kunnen we niet verwijzen naar de kolom alias PriceRange in de groep door. De hele CASUSUITDRUKKING moet worden herhaald. Hier zijn de resultaten van onze query:

Results – CASE Expression in GROUP BY

Wrap Up

zoals u kunt zien, voegt het gebruik van CASE expressions veelzijdigheid toe aan uw SQL-statements. Ze stellen u niet alleen in staat om gegevens te transformeren van de ene set van waarden naar de andere, maar kunnen ook worden gebruikt om ervoor te zorgen dat verklaringen geen fouten retourneren.

van de twee formulieren, simple en searched, gebruik ik meestal het zoekformulier. De reden is dat de eenvoudige vorm beperkt is tot gelijkheidstoets; terwijl de gezochte vorm dat en meer kan doen.

omdat CASE expressies expressies zijn en geen statements of clausules, kunnen ze worden gebruikt wanneer een andere expressie wordt gebruikt. Dat betekent dat je het hele SELECT statement en elders in SQL kunt gebruiken.