나는 이것들이 당신에게 도움이 될 것이라고 생각합니다.
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
주어진 열 값을 기준으로 행의 정렬 순서를 결정합니다. 첫 번째 예에서는 HumanResources.Employee 테이블의 SalariedFlag 열의 값이 평가됩니다. SalariedFlag가 1로 설정된 직원은 내림차순으로 BusinessEntityID에 의해 순서대로 리턴됩니다. SalariedFlag가 0으로 설정된 직원은 BusinessEntityID에 따라 오름차순으로 반환됩니다. 두 번째 예에서 CountryRegionName 열이 'United States'와 같을 때 TerritoryName 열에 따라 결과 집합이 정렬되고 다른 모든 행에 대해 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
SalariedFlag가 0으로 설정된 직원의 VacationHours 열에 설정된 값을 판별합니다. VacationHours에서 10 시간을 빼면 음수 값이되어 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
A의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;
이 예제에 대한 자세한 설명은 소스 를 방문하십시오 .
또한 자세한 내용이 포함 된 예를 보려면 여기 와 여기 를 방문 하십시오 .