web-dev-qa-db-fra.com

Affaire dans une déclaration Select

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
135
fadzli feizal

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.

185
NuNn DaDdY

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.

76
Sabir Al Fateh

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
12
user5035983