適用対象:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Microsoft Fabric の SQL 分析エンドポイント
Microsoft Fabric のウェアハウス
Microsoft Fabric の SQL データベース
CHOOSE Transact-SQL関数はデータベース エンジン内の値のリストから指定されたインデックスのアイテムを返します。
構文
CHOOSE ( index , val_1 , val_2 [ , val_n ] )
引数
インデックス
この引数に続くアイテム リストのインデックス (1 から始まるインデックス) を表す整数式。
提供されたインデックス値に 整数以外の数値データ型がある場合、その値は暗黙的に整数に変換されます。 インデックス値が配列の値の範囲を超えると、 CHOOSENULLを返します。
val_1...val_n
任意のデータ型のコンマ区切られた値の一覧。
戻り値の型
関数に渡される一連の型の中から最も優先順位の高いデータ型を返します。 詳細については、「 Data 型の優先順位」を参照してください。
注釈
CHOOSE 配列はインデックスのように機能し、配列はインデックス引数の後に続く引数で構成されます。 インデックス引数は、 CHOOSE 返す次のどの値を決定します。
CHOOSE節に非常に多くの値(コンマで区切られた数千の値)を明示的に含めると、リソースを消費し、以下のエラーを返すことがあります。
Msg 8631, Level 17, State 1, Line 1
Internal error: Server stack limit has been reached. Please look for potentially deep nesting in your query, and try to simplify it.
例
この記事のコードサンプルは、AdventureWorks2025、AdventureWorksDW2025、またはAdventureWorksLT2025サンプルデータベースを使用しており、Azure Data SQL Samples Repository GitHubリポジトリからダウンロードできます。
A. CHOOSE例
以下の例は、値のリストから3番目の項目を返します。
SELECT CHOOSE(3, 'Manager', 'Director', 'Developer', 'Tester') AS Result;
結果セットは次のとおりです。
Result
-------------
Developer
B. 列に基づくCHOOSE例
以下の例は、 ProductCategoryID 列の値に基づく基本的な文字文字列を返します。
USE AdventureWorks2025;
GO
SELECT ProductCategoryID,
CHOOSE(ProductCategoryID, 'A', 'B', 'C', 'D', 'E') AS Expression1
FROM Production.ProductCategory;
結果セットは次のとおりです。
ProductCategoryID Expression1
----------------- -----------
3 C
1 A
2 B
4 D
C: MONTH と組み合わせた CHOOSE
以下の例は、製品モデルが最後に修正されたシーズンを返します。
MONTH関数はModifiedDate列の月値を返します。
USE AdventureWorksLT;
GO
SELECT Name,
ModifiedDate,
CHOOSE(MONTH(ModifiedDate), 'Winter', 'Winter', 'Spring', 'Spring', 'Spring', 'Summer', 'Summer', 'Summer', 'Autumn', 'Autumn', 'Autumn', 'Winter') AS Quarter_Modified
FROM SalesLT.ProductModel AS PM
WHERE Name LIKE '%Frame%'
ORDER BY ModifiedDate;
結果セットは次のとおりです。
Name ModifiedDate Quarter_Modified
--------------------------- ----------------------- ----------------
HL Road Frame 2002-05-02 00:00:00.000 Spring
HL Mountain Frame 2005-06-01 00:00:00.000 Summer
LL Road Frame 2005-06-01 00:00:00.000 Summer
ML Road Frame 2005-06-01 00:00:00.000 Summer
ML Road Frame-W 2006-06-01 00:00:00.000 Summer
ML Mountain Frame 2006-06-01 00:00:00.000 Summer
ML Mountain Frame-W 2006-06-01 00:00:00.000 Summer
LL Mountain Frame 2006-11-20 09:56:38.273 Autumn
HL Touring Frame 2009-05-16 16:34:28.980 Spring
LL Touring Frame 2009-05-16 16:34:28.980 Spring