Case in Select Statement

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

LEAVE A REPLY

Please enter your comment!
Please enter your name here

three + sixteen =

Other episodes