適用版本:SQL Server 2012。
CHOOSE 邏輯函數
從數值清單傳回指定索引的項目。
CHOOSE 邏輯函數是 SQL Server 2012 版本新增加的函數,這類似於在 Office Access 內的 Choose 函數,會從引數清單選取並傳回值。
語法:
CHOOSE ( index, val_1, val_2 [, val_n ] )
請參考以下的範例程式碼:
EX1:認識 CHOOSE() 邏輯函數
-- 認識 CHOOSE() 邏輯函數 SELECT CHOOSE( 4, N'營業員', N'組長', N'經理', N'協理') N'回傳結果' GO -- 變數與 CHOOSE() 邏輯函數 DECLARE @idx int =4 SELECT CHOOSE( @idx, N'營業員', N'組長', N'經理', N'協理') N'回傳結果' GO
-- 01_認識 CHOOSE() 邏輯函數
-- CHOOSE() 邏輯函數:全部的引數都使用變數 DECLARE @idx int = 1, @var1 nvarchar(10) = N'值1', @var2 nvarchar(10) = N'值2', @var3 nvarchar(10) = N'值3' SELECT CHOOSE(@idx, @var1, @var2, @var3) N'回傳結果' GO
-- 02_CHOOSE() 邏輯函數:全部的引數都使用變數
EX2. CHOOSE() 邏輯函數、CASE() 運算式、資料表聯結
USE Northwind GO SELECT * FROM Categories SELECT * FROM Products GO -- CHOOSE() 邏輯函數:查詢資料表 -- 估計的子樹成本:0.0033744 SELECT ProductID, ProductName, CategoryID, CHOOSE(CategoryID, 'Beverages', 'Condiments', 'Confections', 'Dairy Products', 'Grains/Cereals', 'Meat/Poultry', 'Produce', 'Seafood') 'CategoryName' FROM Products GO
-- 03_CHOOSE() 邏輯函數:查詢資料表
-- 04_CHOOSE() 邏輯函數:查詢資料表_估計的子樹成本
-- CASE() 運算式 -- 估計的子樹成本:0.0033744 SELECT ProductID, ProductName, CategoryID, CASE CategoryID WHEN 1 THEN 'Beverages' WHEN 2 THEN 'Condiments' WHEN 3 THEN 'Confections' WHEN 4 THEN 'Dairy Products' WHEN 5 THEN 'Grains/Cereals' WHEN 6 THEN 'Meat/Poultry' WHEN 7 THEN 'Produce' WHEN 8 THEN 'Seafood' END 'CategoryName' FROM Products GO
-- 05_CASE() 運算式:查詢資料表_估計的子樹成本
-- 資料表聯結 -- 估計的子樹成本:0.0103786 SELECT ProductID, ProductName, p.CategoryID, CategoryName FROM Products p INNER JOIN Categories c ON c.CategoryID = c.CategoryID GO
-- 06_資料表聯結:查詢資料表_估計的子樹成本
由上,整理這三段 T-SQL 所耗損的子樹成本:
(1) CHOOSE() 邏輯函數:查詢資料表 -- 估計的子樹成本:0.0033744
(2) CASE() 運算式 -- 估計的子樹成本:0.0033744
(3) 資料表聯結 -- 估計的子樹成本:0.0103786
EX4:輸入不存在的索引值
-- 索引值:0 SELECT CHOOSE( 0, N'營業員', N'組長', N'經理', N'協理') N'回傳結果' GO /* 回傳:NULL */ -- 超過的索引值 SELECT CHOOSE( 10, N'營業員', N'組長', N'經理', N'協理') N'回傳結果' GO /* 回傳:NULL */ -- 變數傳入:超過的索引值 DECLARE @idx int =10 SELECT CHOOSE( @idx, N'營業員', N'組長', N'經理', N'協理') N'回傳結果' GO /* 回傳:NULL */
-- 07_輸入不存在的索引值
參考資料
CHOOSE (Transact-SQL)
http://msdn.microsoft.com/zh-tw/library/hh213019.aspx
資料類型優先順序 (Transact-SQL)
http://msdn.microsoft.com/zh-tw/library/ms190309.aspx
邏輯函數 (Transact-SQL)
http://msdn.microsoft.com/zh-tw/library/hh213226
Choose 函數 -- Office Access 2007
http://office.microsoft.com/zh-tw/access-help/HA001228797.aspx
沒有留言:
張貼留言