Случай в Select Statement

У меня есть оператор SQL, который имеет CASE из SELECT, и я просто не могу понять это правильно. Можете ли вы, ребята, показать мне пример CASE, где дела - это условия, а результаты - из случаев. Например:

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

где результаты показывают

 name                         age       handphone
xxx1                         yyy1      blackberry
xxx2                         yyy2      blackberry

Ответ 1

MSDN - хорошая ссылка для этих типов вопросов, касающихся синтаксиса и использования. Это из страницы 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

Еще один хороший сайт, который вы можете проверить, используете ли вы SQL Server, - SQL Server Central. Это имеет большое количество ресурсов, доступных для любой области SQL Server, которую вы хотели бы изучить.

Ответ 2

Я думаю, что это может быть полезно для вас.

Использование оператора SELECT с простым выражением CASE

В выражении SELECT простое выражение CASE допускает только проверку равенства; других сравнений не делается. В следующем примере используется выражение CASE для изменения отображения категорий продуктов, чтобы сделать их более понятными.

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

Использование оператора SELECT с искомым выражением CASE

В выражении SELECT искомое выражение CASE позволяет заменять значения в наборе результатов на основе значений сравнения. Следующий пример отображает цену в виде текстового комментария на основе ценового диапазона для продукта.

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 в предложении ORDER BY

В следующих примерах используется выражение CASE в предложении ORDER BY, чтобы определить порядок сортировки строк на основе заданного значения столбца. В первом примере оценивается значение в столбце SalariedFlag таблицы HumanResources.Employee. Сотрудники, у которых параметр SalariedFlag установлен в 1, возвращаются по порядку в BusinessEntityID в порядке убывания. Сотрудники, у которых параметр SalariedFlag установлен на 0, возвращаются по порядку по BusinessEntityID в порядке возрастания. Во втором примере результирующий набор упорядочивается столбцом TerritoryName, когда столбец CountryRegionName равен 'United States' и CountryRegionName для всех остальных строк.

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 в операторе UPDATE

В следующем примере выражение CASE используется в выражении UPDATE для определения значения, которое задано для столбца VacationHours для сотрудников с параметром SalariedFlag, равным 0. При вычитании 10 часов из результатов VacationHours отрицательное значение, VacationHours увеличивается на 40 часов; В противном случае VacationHours увеличивается на 20 часов. Предложение OUTPUT используется для отображения значений до и после отпуска.

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 в предложении HAVING

В следующем примере выражение CASE используется в выражении HAVING, чтобы ограничить строки, возвращаемые оператором SELECT. Операция возвращает максимальную почасовую ставку для каждого названия задания в таблице HumanResources.Employee. Предложение HAVING ограничивает права на те, которые удерживаются мужчинами с максимальной ставкой более 40 долларов или женщинами с максимальной ставкой в ​​размере более 42 долларов.

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;

Ответ 3

вы также можете использовать:

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