Fall in Select-Anweisung


141

Ich habe eine SQL-Anweisung mit einem CASEvon SELECTund kann es einfach nicht richtig machen. Könnt ihr mir ein Beispiel zeigen, CASEwo die Fälle die Bedingungen sind und die Ergebnisse aus den Fällen stammen? Beispielsweise:

     Select xxx, yyy
     case : desc case when bbb then 'blackberry';
     when sss then 'samsung';
     end 
     from (select ???? .....

wo die Ergebnisse zeigen

 name                         age       handphone
xxx1                         yyy1      blackberry
xxx2                         yyy2      blackberry

Meine Antwort erklärt zwei Falltypen: 1. Einfacher CASE-Ausdruck 2. Gesuchte CASE-Ausdrücke. Und die Verwendung beider Groß- / Kleinschreibung in SELECT, UPDATE, With ORDER BY, With HAVING-Abfragen.
Somnath Muluk

Antworten:


195

Der MSDN ist eine gute Referenz für diese Art von Fragen bezüglich Syntax und Verwendung. Dies ist von der Seite 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

Eine weitere gute Site, die Sie möglicherweise überprüfen möchten, wenn Sie SQL Server verwenden, ist SQL Server Central . Hier stehen eine Vielzahl von Ressourcen für jeden Bereich von SQL Server zur Verfügung, den Sie erlernen möchten.


82

Ich denke, diese könnten für Sie hilfreich sein.

Verwenden einer SELECTAnweisung mit einem einfachen CASEAusdruck

Innerhalb einer SELECTAnweisung ermöglicht ein einfacher CASEAusdruck nur eine Gleichheitsprüfung. Es werden keine weiteren Vergleiche durchgeführt. Im folgenden Beispiel wird der CASEAusdruck verwendet, um die Anzeige von Produktlinienkategorien zu ändern und sie verständlicher zu machen.

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

Verwenden einer SELECTAnweisung mit einem gesuchten CASEAusdruck

Innerhalb einer SELECTAnweisung ermöglicht der gesuchte CASEAusdruck, dass Werte in der Ergebnismenge basierend auf Vergleichswerten ersetzt werden. Im folgenden Beispiel wird der Listenpreis als Textkommentar basierend auf der Preisspanne für ein Produkt angezeigt.

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

Verwendung CASEin einer ORDER BYKlausel

In den folgenden Beispielen wird der CASEAusdruck in einer ORDER BYKlausel verwendet, um die Sortierreihenfolge der Zeilen basierend auf einem bestimmten Spaltenwert zu bestimmen. Im ersten Beispiel wird der Wert in der Spalte SalariedFlag der Tabelle HumanResources.Employee ausgewertet. Mitarbeiter, deren SalariedFlag auf 1 gesetzt ist, werden von der BusinessEntityID in absteigender Reihenfolge in der Reihenfolge zurückgegeben. Mitarbeiter, deren SalariedFlag auf 0 gesetzt ist, werden von der BusinessEntityID in aufsteigender Reihenfolge zurückgegeben. Im zweiten Beispiel wird die Ergebnismenge nach der Spalte TerritoryName sortiert, wenn die Spalte CountryRegionName gleich 'USA' ist, und nach CountryRegionName für alle anderen Zeilen.

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;

Verwendung CASEin einer UPDATEAnweisung

Im folgenden Beispiel wird der CASEAusdruck in einer UPDATEAnweisung verwendet, um den Wert zu bestimmen, der für die Spalte VacationHours für Mitarbeiter mit SalariedFlag auf 0 festgelegt ist. Wenn das Subtrahieren von 10 Stunden von VacationHours zu einem negativen Wert führt, wird VacationHours um 40 Stunden erhöht. Andernfalls wird die Urlaubszeit um 20 Stunden erhöht. Die OUTPUTKlausel wird verwendet, um die Werte vor und nach dem Urlaub anzuzeigen.

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; 

Verwendung CASEin einer HAVINGKlausel

Im folgenden Beispiel wird der CASEAusdruck in einer HAVINGKlausel verwendet, um die von der SELECTAnweisung zurückgegebenen Zeilen einzuschränken . Die Anweisung gibt den maximalen Stundensatz für jede Berufsbezeichnung in der Tabelle HumanResources.Employee zurück. Die HAVINGKlausel beschränkt die Titel auf diejenigen, die von Männern mit einem Höchstlohn von mehr als 40 Dollar oder von Frauen mit einem Höchstlohn von mehr als 42 Dollar gehalten werden.

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;

Weitere Informationen zu diesem Beispiel finden Sie in der Quelle .

Besuchen Sie auch hier und hier einige Beispiele mit vielen Details.


Schätzen Sie wirklich eine so detaillierte Antwort.
Aneeq Azam Khan

12

Sie können auch verwenden:

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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.