Tôi nghĩ rằng những điều này có thể hữu ích cho bạn.
Sử dụng một SELECT
câu lệnh với một CASE
biểu thức đơn giản
Trong một SELECT
tuyên bố, một CASE
biểu thức đơn giản chỉ cho phép kiểm tra đẳng thức; không có so sánh khác được thực hiện. Ví dụ sau sử dụng CASE
biểu thức để thay đổi hiển thị các danh mục dòng sản phẩm để làm cho chúng dễ hiểu hơn.
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
Sử dụng một SELECT
tuyên bố với một CASE
biểu thức tìm kiếm
Trong một SELECT
câu lệnh, CASE
biểu thức tìm kiếm cho phép thay thế các giá trị trong tập kết quả dựa trên các giá trị so sánh. Ví dụ sau hiển thị giá niêm yết dưới dạng nhận xét văn bản dựa trên phạm vi giá cho sản phẩm.
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
Sử dụng CASE
trong một ORDER BY
mệnh đề
Các ví dụ sau sử dụng CASE
biểu thức trong ORDER BY
mệnh đề để xác định thứ tự sắp xếp của các hàng dựa trên giá trị cột đã cho. Trong ví dụ đầu tiên, giá trị trong cột SalariedFlag của bảng HumanResource.Employee được ước tính. Các nhân viên có SalariedFlag được đặt thành 1 được BusinessEntityID trả về theo thứ tự giảm dần. Các nhân viên có SalariedFlag được đặt thành 0 được BusinessEntityID trả về theo thứ tự tăng dần. Trong ví dụ thứ hai, tập kết quả được sắp xếp theo cột Lãnh thổ khi cột CountryRegionName bằng 'Hoa Kỳ' và bởi CountryRegionName cho tất cả các hàng khác.
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;
Sử dụng CASE
trong một UPDATE
tuyên bố
Ví dụ sau sử dụng CASE
biểu thức trong một UPDATE
câu lệnh để xác định giá trị được đặt cho cột VacationHours cho nhân viên với SalariedFlag được đặt thành 0. Khi trừ 10 giờ từ VacationHours dẫn đến giá trị âm, VacationHours tăng thêm 40 giờ; mặt khác, VacationHours được tăng thêm 20 giờ. Các OUTPUT
khoản được sử dụng để hiển thị trước và sau khi giá trị kỳ nghỉ.
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;
Sử dụng CASE
trong một HAVING
mệnh đề
Ví dụ sau sử dụng CASE
biểu thức trong HAVING
mệnh đề để hạn chế các hàng được trả về bởi SELECT
câu lệnh. Câu lệnh trả về tỷ lệ tối đa hàng giờ cho mỗi chức danh công việc trong bảng HumanResource.Employee. Điều HAVING
khoản này giới hạn các chức danh đối với những người được giữ bởi nam giới có mức chi trả tối đa lớn hơn 40 đô la hoặc phụ nữ có tỷ lệ chi trả tối đa lớn hơn 42 đô la.
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;
Để biết thêm chi tiết mô tả về các ví dụ này truy cập vào nguồn .
Cũng truy cập ở đây và ở đây cho một số ví dụ với các chi tiết tuyệt vời.