搜尋本站文章

2012-07-06

SQL Server 2012 :認識 CHOOSE 邏輯函數


適用版本: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