Ik heb een SQL-statement met een CASE
van SELECT
en ik krijg het gewoon niet goed. Kunnen jullie me een voorbeeld laten zien van CASE
waarbij de cases de voorwaarden zijn en de resultaten van de cases. Bijvoorbeeld:
Select xxx, yyy
case : desc case when bbb then 'blackberry';
when sss then 'samsung';
end
from (select ???? .....
waar de resultaten worden weergegeven
name age handphone
xxx1 yyy1 blackberry
xxx2 yyy2 blackberry
Antwoord 1, autoriteit 100%
De MSDN is een goede referentie voor dit soort vragen over syntaxis en gebruik. Dit komt van de Transact SQL Reference – CASE-pagina.
http://msdn.microsoft.com/en-us/library/ ms181765.aspx
USE AdventureWorks2012;
GO
SELECT ProductNumber, Name, "Price Range" =
CASE
WHEN ListPrice = 0 THEN 'Mfg item - not for resale'
WHEN ListPrice < 50 THEN 'Under $50'
WHEN ListPrice >= 50 and ListPrice < 250 THEN 'Under $250'
WHEN ListPrice >= 250 and ListPrice < 1000 THEN 'Under $1000'
ELSE 'Over $1000'
END
FROM Production.Product
ORDER BY ProductNumber ;
GO
Een andere goede site die u misschien wilt bekijken als u SQL Server gebruikt, is SQL Server Central. Dit heeft een grote verscheidenheid aan bronnen beschikbaar voor elk gebied van SQL Server dat u wilt leren.
Antwoord 2, autoriteit 42%
Ik denk dat deze nuttig voor je kunnen zijn.
Een SELECT
-instructie gebruiken met een eenvoudige CASE
-uitdrukking
Binnen een SELECT
-statement laat een eenvoudige CASE
-expressie alleen een gelijkheidscontrole toe; er worden geen andere vergelijkingen gemaakt. In het volgende voorbeeld wordt de uitdrukking CASE
gebruikt om de weergave van productlijncategorieën te wijzigen om ze begrijpelijker te maken.
USE AdventureWorks2012;
GO
SELECT ProductNumber, Category =
CASE ProductLine
WHEN 'R' THEN 'Road'
WHEN 'M' THEN 'Mountain'
WHEN 'T' THEN 'Touring'
WHEN 'S' THEN 'Other sale items'
ELSE 'Not for sale'
END,
Name
FROM Production.Product
ORDER BY ProductNumber;
GO
Een SELECT
-statement gebruiken met een gezochte CASE
-expressie
Binnen een SELECT
-instructie zorgt de gezochte CASE
-expressie ervoor dat waarden in de resultaatset kunnen worden vervangen op basis van vergelijkingswaarden. In het volgende voorbeeld wordt de catalogusprijs weergegeven als een tekstopmerking op basis van de prijsklasse voor een product.
USE AdventureWorks2012;
GO
SELECT ProductNumber, Name, "Price Range" =
CASE
WHEN ListPrice = 0 THEN 'Mfg item - not for resale'
WHEN ListPrice < 50 THEN 'Under $50'
WHEN ListPrice >= 50 and ListPrice < 250 THEN 'Under $250'
WHEN ListPrice >= 250 and ListPrice < 1000 THEN 'Under $1000'
ELSE 'Over $1000'
END
FROM Production.Product
ORDER BY ProductNumber ;
GO
CASE
gebruiken in een ORDER BY
-clausule
In de volgende voorbeelden wordt de uitdrukking CASE
in een ORDER BY
-clausule gebruikt om de sorteervolgorde van de rijen te bepalen op basis van een bepaalde kolomwaarde. In het eerste voorbeeld wordt de waarde in de kolom SalriedFlag van de tabel HumanResources.Employee geëvalueerd. Werknemers waarvan de SalriedFlag is ingesteld op 1 worden op volgorde geretourneerd door de BusinessEntityID in aflopende volgorde. Werknemers waarvan de SalriedFlag is ingesteld op 0, worden in oplopende volgorde geretourneerd door de BusinessEntityID. In het tweede voorbeeld is de resultatenset geordend op de kolom TerritName wanneer de kolom CountryRegionName gelijk is aan ‘United States’ en op CountryRegionName voor alle andere rijen.
SELECT BusinessEntityID, SalariedFlag
FROM HumanResources.Employee
ORDER BY CASE SalariedFlag WHEN 1 THEN BusinessEntityID END DESC
,CASE WHEN SalariedFlag = 0 THEN BusinessEntityID END;
GO
SELECT BusinessEntityID, LastName, TerritoryName, CountryRegionName
FROM Sales.vSalesPerson
WHERE TerritoryName IS NOT NULL
ORDER BY CASE CountryRegionName WHEN 'United States' THEN TerritoryName
ELSE CountryRegionName END;
CASE
gebruiken in een UPDATE
-instructie
Het volgende voorbeeld gebruikt de uitdrukking CASE
in een UPDATE
-instructie om de waarde te bepalen die is ingesteld voor de kolom VacationHours voor werknemers met SalriedFlag ingesteld op 0. Bij het aftrekken van 10 uren vanaf Vakantieuren resulteert in een negatieve waarde, Vakantieuren wordt verhoogd met 40 uur; anders wordt VacationHours met 20 uur verhoogd. De OUTPUT
-clausule wordt gebruikt om de waarden voor en na de vakantie weer te geven.
USE AdventureWorks2012;
GO
UPDATE HumanResources.Employee
SET VacationHours =
( CASE
WHEN ((VacationHours - 10.00) < 0) THEN VacationHours + 40
ELSE (VacationHours + 20.00)
END
)
OUTPUT Deleted.BusinessEntityID, Deleted.VacationHours AS BeforeValue,
Inserted.VacationHours AS AfterValue
WHERE SalariedFlag = 0;
CASE
gebruiken in een HAVING
-clausule
Het volgende voorbeeld gebruikt de uitdrukking CASE
in een HAVING
-clausule om de rijen te beperken die worden geretourneerd door de instructie SELECT
. De instructie retourneert het maximale uurtarief voor elke functietitel in de tabel HumanResources.Employee. De HAVING
-clausule beperkt de titels tot titels die in het bezit zijn van mannen met een maximumloon van meer dan 40 dollar of van vrouwen met een maximumloon van meer dan 42 dollar.
USE AdventureWorks2012;
GO
SELECT JobTitle, MAX(ph1.Rate)AS MaximumRate
FROM HumanResources.Employee AS e
JOIN HumanResources.EmployeePayHistory AS ph1 ON e.BusinessEntityID = ph1.BusinessEntityID
GROUP BY JobTitle
HAVING (MAX(CASE WHEN Gender = 'M'
THEN ph1.Rate
ELSE NULL END) > 40.00
OR MAX(CASE WHEN Gender = 'F'
THEN ph1.Rate
ELSE NULL END) > 42.00)
ORDER BY MaximumRate DESC;
Ga voor meer informatie over de beschrijving van dit voorbeeld naar de bron.
Bezoek ook hier en hier voor enkele voorbeelden met veel details.
Antwoord 3, autoriteit 7%
u kunt ook gebruiken:
SELECT CASE
WHEN upper(t.name) like 'P%' THEN
'productive'
WHEN upper(t.name) like 'T%' THEN
'test'
WHEN upper(t.name) like 'D%' THEN
'development'
ELSE
'unknown'
END as type
FROM table t