SELECT CompanyName, ContactName, ContactTitle
FROM Customers
ORDER BY CompanyName; -- 固定依公司名排序
CASE [input_expression]
WHEN when_expression THEN result_expression
[...n]
[ELSE else_result_expression]
END
SELECT FirstName, TitleOfCourtesy,
CourtesyInTC = CASE TitleOfCourtesy
WHEN 'Ms.' THEN '小姐'
WHEN 'Dr.' THEN '博士'
WHEN 'Mr.' THEN '先生'
WHEN 'Mrs.' THEN '太太'
ELSE '先生/小姐'
END
FROM Employees;
在 `ORDER BY` 後搭配 `CASE`,依變數決定排序欄位:
DECLARE @OrderKey TINYINT = 2; -- 1=CompanyName, 2=ContactName, 其他=ContactTitle
SELECT CompanyName, ContactName, ContactTitle
FROM Customers
ORDER BY CASE
WHEN @OrderKey = 1 THEN CompanyName
WHEN @OrderKey = 2 THEN ContactName
ELSE ContactTitle
END;
CREATE PROCEDURE sp_SelectCustomersDynamicOrder
@OrderKey TINYINT = NULL
AS
BEGIN
SELECT CompanyName, ContactName, ContactTitle
FROM Customers
ORDER BY CASE
WHEN @OrderKey = 1 THEN CompanyName
WHEN @OrderKey = 2 THEN ContactName
ELSE ContactTitle
END;
END;
EXEC sp_SelectCustomersDynamicOrder; -- 預設 ContactTitle
EXEC sp_SelectCustomersDynamicOrder 1; -- 依 CompanyName
EXEC sp_SelectCustomersDynamicOrder 2; -- 依 ContactName
ORDER BY CASE
WHEN @SortBy = 'NameAsc' THEN ContactName
WHEN @SortBy = 'NameDesc' THEN ContactName
ELSE CompanyName
END
ASC, -- 或搭配第二層 CASE 控制 ASC/DESC
CASE
WHEN @SortBy = 'NameDesc' THEN ContactName
END DESC;