Imam izjavo SQL, ki ima CASE
iz SELECT
in je preprosto ne morem spraviti v red. Ali mi lahko pokažete primer CASE
, kjer so primeri pogoji, rezultati pa so iz primerov. Na primer:
Select xxx, yyy
case : desc case when bbb then 'blackberry';
when sss then 'samsung';
end
from (select ???? .....
kjer so rezultati prikazani
name age handphone
xxx1 yyy1 blackberry
xxx2 yyy2 blackberry
MSDN je dobra referenca za tovrstna vprašanja glede sintakse in uporabe. To je iz strani Transact SQL Reference - CASE.
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
Če uporabljate strežnik SQL Server, si lahko ogledate še eno dobro spletno mesto, in sicer SQL Server Central. Na njem je na voljo veliko različnih virov za katero koli področje strežnika SQL Server, ki bi se ga radi naučili.
Mislim, da vam bodo v pomoč.
Uporaba izjave SELECT
s preprostim izrazom CASE
V stavku SELECT
preprost izraz CASE
omogoča le preverjanje enakosti; drugih primerjav ni. Naslednji primer uporablja izraz CASE
za spremembo prikaza kategorij proizvodnih linij, da so te bolj razumljive.
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
Uporaba izjave SELECT
z iskanim izrazom CASE
V stavku SELECT
iskani izraz CASE
omogoča zamenjavo vrednosti v nizu rezultatov na podlagi primerjalnih vrednosti. Naslednji primer prikaže cenik kot besedilni komentar na podlagi cenovnega razpona za izdelek.
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
Uporaba CASE
v stavku ORDER BY
Naslednji primeri uporabljajo izraz CASE
v klavzuli ORDER BY
za določitev vrstnega reda vrstic na podlagi dane vrednosti stolpca. V prvem primeru se oceni vrednost v stolpcu SalariedFlag v tabeli HumanResources.Employee. Zaposleni, ki imajo vrednost SalariedFlag nastavljeno na 1, so vrnjeni po BusinessEntityID v padajočem vrstnem redu. Zaposleni, ki imajo zastavico SalariedFlag nastavljeno na 0, se vrnejo po vrstnem redu BusinessEntityID v naraščajočem vrstnem redu. V drugem primeru je niz rezultatov urejen po stolpcu TerritoryName, kadar je stolpec CountryRegionName enak 'United States' in po CountryRegionName za vse druge vrstice.
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;
Uporaba CASE
v stavku UPDATE
Naslednji primer uporablja izraz CASE
v stavku UPDATE
za določitev vrednosti, ki se nastavi za stolpec VacationHours za zaposlene z zastavico SalariedFlag, nastavljeno na 0. Če je rezultat odštevanja 10 ur od VacationHours negativen, se VacationHours poveča za 40 ur, sicer pa se VacationHours poveča za 20 ur. Klavzula OUTPUT
se uporablja za prikaz vrednosti pred in po dopustu.
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;
Uporaba CASE
v klavzuli HAVING
Naslednji primer uporablja izraz CASE
v klavzuli HAVING
za omejitev vrstic, ki jih vrne ukaz SELECT
. Izjava vrne najvišjo urno postavko za vsak naziv delovnega mesta v tabeli HumanResources.Employee. Klavzula HAVING
omeji nazive na tiste, ki jih imajo moški z najvišjo urno postavko večjo od 40 dolarjev ali ženske z najvišjo urno postavko večjo od 42 dolarjev.
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;
Za podrobnejši opis teh primerov obiščite vir.
Obiščite tudi tukaj in tukaj za nekaj primerov z velikimi podrobnostmi.
lahko uporabite tudi:
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