У меня есть оператор SQL, у которого есть CASE
from, 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
sql
sql-server
case
Fadzli Feizal
источник
источник
Ответы:
MSDN - хороший справочник для подобных вопросов, касающихся синтаксиса и использования. Это со страницы Справочник по Transact SQL - 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, которую вы хотели бы изучить.
источник
Я думаю, это может быть вам полезно.
Использование
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;
Для более детального описания этого примера посетите источник .
Также посетите здесь и здесь, чтобы увидеть несколько примеров с подробностями.
источник
вы также можете использовать:
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
источник