J'ai une instruction SQL qui a un CASE
de SELECT
et je ne peux tout simplement pas bien comprendre. Pouvez-vous me montrer un exemple de CASE
où les cas sont les conditions et les résultats proviennent des cas. Par exemple:
Select xxx, yyy
case : desc case when bbb then 'blackberry';
when sss then 'samsung';
end
from (select ???? .....
où les résultats montrent
name age handphone
xxx1 yyy1 blackberry
xxx2 yyy2 blackberry
Le MSDN est une bonne référence pour ce type de questions concernant la syntaxe et l’utilisation. Cela provient de la page 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
Un autre bon site que vous voudrez peut-être consulter si vous utilisez SQL Server est SQL Server Central . Cela offre une grande variété de ressources disponibles pour tous les domaines de SQL Server que vous souhaitez apprendre.
Je pense que ceux-ci pourraient être utiles pour vous.
Utilisation d'une instruction SELECT
avec une expression simple CASE
Dans une instruction SELECT
, une simple expression CASE
ne permet qu'un contrôle d'égalité; aucune autre comparaison n'est faite. L'exemple suivant utilise l'expression CASE
pour modifier l'affichage des catégories de lignes de produits afin de les rendre plus compréhensibles.
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
Utilisation d'une instruction SELECT
avec une expression recherchée CASE
Dans une instruction SELECT
, l'expression recherchée CASE
permet de remplacer des valeurs dans l'ensemble de résultats en fonction des valeurs de comparaison. L'exemple suivant affiche le prix affiché sous forme de commentaire textuel basé sur la fourchette de prix d'un produit.
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
Utilisation de CASE
dans une clause ORDER BY
Les exemples suivants utilisent l'expression CASE
dans une clause ORDER BY
pour déterminer l'ordre de tri des lignes en fonction d'une valeur de colonne donnée. Dans le premier exemple, la valeur de la colonne SalariedFlag de la table HumanResources.Employee est évaluée. Les employés pour lesquels SalariedFlag est défini sur 1 sont renvoyés dans l'ordre par BusinessEntityID par ordre décroissant. Les employés pour lesquels SalariedFlag est défini sur 0 sont renvoyés dans l'ordre par BusinessEntityID par ordre croissant. Dans le deuxième exemple, le jeu de résultats est classé par la colonne Nom de territoire lorsque la colonne CountryRegionName est égale à 'États-Unis' et par CountryRegionName pour toutes les autres lignes.
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;
Utilisation de CASE
dans une instruction UPDATE
L'exemple suivant utilise l'expression CASE
dans une instruction UPDATE
pour déterminer la valeur définie pour la colonne VacationHours pour les employés avec SalariedFlag défini sur 0. Lorsque vous soustrayez 10 heures de VacationHours, la valeur est négative. VacationHours est augmenté de 40 heures; sinon, VacationHours est augmenté de 20 heures. La clause OUTPUT
permet d'afficher les valeurs avant et après les vacances.
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;
Utilisation de CASE
dans une clause HAVING
L'exemple suivant utilise l'expression CASE
dans une clause HAVING
pour limiter les lignes renvoyées par l'instruction SELECT
. L'instruction renvoie le taux horaire maximal pour chaque titre de travail dans la table HumanResources.Employee. La clause HAVING
limite les titres aux personnes détenues par des hommes dont le taux de rémunération maximal est supérieur à 40 dollars ou par les femmes dont le taux de rémunération maximal est supérieur à 42 dollars.
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;
Pour plus de détails sur la description de ces exemples, visitez le source .
Visitez également ici et ici pour quelques exemples très détaillés.
vous pouvez aussi utiliser:
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