| 
				
			 | 
			
				条件によって置き換える (CASE,DECODE,IIF,IF) 
				―ORACLEの場合― 
				条件によって返す値を置き換えるには、CASE,DECODEを利用します。 
				CASEには、ある項目・値・式との一致の比較をする「単純CASE式」と、 
				評価式を複数記述する「検索CASE式」があります。 
				一方DECODEは基本的に、ある項目・値・式との一致を比較します。 
				 
				単純CASE式 
				
					
						
							文法:CASE <比較元の列名、式、値など> 
							    WHEN <比較する列名、式、値など> THEN <返す列名、式、値など> 
							    [WHEN <比較する列名、式、値など> THEN <返す列名、式、値など>] 
							    [ELSE <上記に該当しない場合に返す列名、式、値など>] 
							   END
						 | 
					 
				 
				※ELSEを省略した場合は、WHENに該当しなければNULLを返します 
				 
				検索CASE式 
				
					
						
							文法:CASE 
							    WHEN <比較式など> THEN <返す列名、式、値など> 
							    [WHEN <比較式など> THEN <返す列名、式、値など>] 
							    [ELSE <上記に該当しない場合に返す列名、式、値など>] 
							   END
						 | 
					 
				 
				※ELSEを省略した場合は、WHENに該当しなければNULLを返します 
				 
				DECODE 
				
					
						
							文法:DECODE(<比較元の列名、式、値など>, 
							    <比較する列名、式、値など>, <返す列名、式、値など> 
							    [,<比較する列名、式、値など>, <返す列名、式、値など>…] 
							    [,<上記に該当しない場合に返す列名、式、値など>] 
							   )
						 | 
					 
				 
				※<上記に該当しない場合に返す列名、式、値など>を省略した場合は、 
				 全てに該当しなければNULLを返します 
				
  
				―SQL Serverの場合― 
				条件によって返す値を置き換えるには、CASE,IIFを利用します。 
				(IIFはSQL Server 2012で対応) 
				CASEには、ある項目・値・式との一致の比較をする「単純CASE式」と、 
				評価式を複数記述する「検索CASE式」があります。 
				一方IIFは、ブール式(True/Falseを返す式)の条件がTrueかFalseかで返す値を置き換えるものです。 
				 
				単純CASE式 
				
					
						
							文法:CASE <比較元の列名、式、値など> 
							    WHEN <比較する列名、式、値など> THEN <返す列名、式、値など> 
							    [WHEN <比較する列名、式、値など> THEN <返す列名、式、値など>] 
							    [ELSE <上記に該当しない場合に返す列名、式、値など>] 
							   END
						 | 
					 
				 
				※ELSEを省略した場合は、WHENに該当しなければNULLを返します 
				 
				検索CASE式 
				
					
						
							文法:CASE 
							    WHEN <比較式など> THEN <返す列名、式、値など> 
							    [WHEN <比較式など> THEN <返す列名、式、値など>] 
							    [ELSE <上記に該当しない場合に返す列名、式、値など>] 
							   END
						 | 
					 
				 
				※ELSEを省略した場合は、WHENに該当しなければNULLを返します 
				 
				IIF 
				
					
						
							文法:IIF(<ブール式の条件>,  
							     <Trueの場合に返す列名、式、値など>, 
							     <Falseの場合に返す列名、式、値など> 
							   )
						 | 
					 
				 
				
  
				―PostgreSQLの場合― 
				条件によって返す値を置き換えるには、CASEを利用します。 
				CASEには、ある項目・値・式との一致の比較をする「単純CASE式」と、 
				評価式を複数記述する「検索CASE式」があります。 
				 
				単純CASE式 
				
					
						
							文法:CASE <比較元の列名、式、値など> 
							    WHEN <比較する列名、式、値など> THEN <返す列名、式、値など> 
							    [WHEN <比較する列名、式、値など> THEN <返す列名、式、値など>] 
							    [ELSE <上記に該当しない場合に返す列名、式、値など>] 
							   END
						 | 
					 
				 
				※ELSEを省略した場合は、WHENに該当しなければNULLを返します 
				 
				検索CASE式 
				
					
						
							文法:CASE 
							    WHEN <比較式など> THEN <返す列名、式、値など> 
							    [WHEN <比較式など> THEN <返す列名、式、値など>] 
							    [ELSE <上記に該当しない場合に返す列名、式、値など>] 
							   END
						 | 
					 
				 
				※ELSEを省略した場合は、WHENに該当しなければNULLを返します 
				
  
				―MySQLの場合― 
				条件によって返す値を置き換えるには、CASE,IFを利用します。 
				CASEには、ある項目・値・式との一致の比較をする「単純CASE式」と、 
				評価式を複数記述する「検索CASE式」があります。 
				一方IFは、ブール式(True/Falseを返す式)の条件がTrueかFalseかで返す値を置き換えるものです。 
				 
				単純CASE式 
				
					
						
							文法:CASE <比較元の列名、式、値など> 
							    WHEN <比較する列名、式、値など> THEN <返す列名、式、値など> 
							    [WHEN <比較する列名、式、値など> THEN <返す列名、式、値など>] 
							    [ELSE <上記に該当しない場合に返す列名、式、値など>] 
							   END
						 | 
					 
				 
				※ELSEを省略した場合は、WHENに該当しなければNULLを返します 
				 
				検索CASE式 
				
					
						
							文法:CASE 
							    WHEN <比較式など> THEN <返す列名、式、値など> 
							    [WHEN <比較式など> THEN <返す列名、式、値など>] 
							    [ELSE <上記に該当しない場合に返す列名、式、値など>] 
							   END
						 | 
					 
				 
				※ELSEを省略した場合は、WHENに該当しなければNULLを返します 
				 
				IF 
				
					
						
							文法:IF(<ブール式の条件>,  
							     <Trueの場合に返す列名、式、値など>, 
							     <Falseの場合に返す列名、式、値など> 
							   )
						 | 
					 
				 
				
  
				***例1*** 
				・性別コードが1の場合は"男性"、2の場合は"女性"、それ以外は"不明"を返す 
				[社員マスタ] 
				
					
						| 社員コード | 
						氏名 | 
						性別コード | 
					 
					
						| 001 | 
						テスト一郎 | 
						1 | 
					 
					
						| 002 | 
						テスト花子 | 
						2 | 
					 
					
						| 003 | 
						テスト二郎 | 
						0 | 
					 
					
						| 004 | 
						テスト桜子 | 
						2 | 
					 
				 
				 
				[実行SQL] 
				--単純CASE式(Oracle,SQL Server,PostgreSQL,MySQL)--
				
					
						
							SELECT 
							  社員コード, 氏名, 
							  (CASE 性別コード 
							   WHEN 1 THEN '男性' 
							   WHEN 2 THEN '女性' 
							   ELSE '不明' 
							  END) AS 性別 
							FROM 
							  社員マスタ
						 | 
					 
				 
				 
				--検索CASE式(Oracle,SQL Server,PostgreSQL,MySQL)--
				
					
						
							SELECT 
							  社員コード, 氏名, 
							  (CASE 
							   WHEN 性別コード = 1 THEN '男性' 
							   WHEN 性別コード = 2 THEN '女性' 
							   ELSE '不明' 
							  END) AS 性別 
							FROM 
							  社員マスタ
						 | 
					 
				 
				 
				--DECODE(Oracle)--
				
					
						
							SELECT 
							  社員コード, 氏名, 
							  DECODE(性別コード, 1, '男性', 2, '女性', '不明') AS 性別 
							FROM 
							  社員マスタ
						 | 
					 
				 
				 
				--IIF(SQL Server)--
				
					
						
							SELECT 
							  社員コード, 氏名, 
							  IIF(性別コード = 1, '男性', 
							    IIF(性別コード = 2, '女性', '不明')) AS 性別 
							FROM 
							  社員マスタ
						 | 
					 
				 
				 
				--IF(MySQL)--
				
					
						
							SELECT 
							  社員コード, 氏名, 
							  IF(性別コード = 1, '男性', 
							    IF(性別コード = 2, '女性', '不明')) AS 性別 
							FROM 
							  社員マスタ
						 | 
					 
				 
				 
				[結果]
				
					
						| 社員コード | 
						氏名 | 
						性別 | 
					 
					
						| 001 | 
						テスト一郎 | 
						男性 | 
					 
					
						| 002 | 
						テスト花子 | 
						女性 | 
					 
					
						| 003 | 
						テスト二郎 | 
						不明 | 
					 
					
						| 004 | 
						テスト桜子 | 
						女性 | 
					 
				 
				 
				 
				***例2*** 
				・売上金額が5,000円以上はAを、2,000円以上はBを、それ以外はCを返す 
				[売上表] 
				
					
						| 商品名 | 
						売上金額 | 
					 
					
						| りんご | 
						2500 | 
					 
					
						| みかん | 
						1200 | 
					 
					
						| ぶどう | 
						3000 | 
					 
					
						| バナナ | 
						8000 | 
					 
				 
				 
				[実行SQL] 
				--検索CASE式(Oracle,SQL Server,PostgreSQL,MySQL)--
				
					
						
							SELECT 
							  商品名, 売上金額, 
							  (CASE 
							   WHEN 売上金額 >= 5000 THEN 'A' 
							   WHEN 売上金額 >= 2000 THEN 'B' 
							   ELSE 'C' 
							  END) AS ランク 
							FROM 
							  売上表
						 | 
					 
				 
				 
				--DECODE(Oracle)--
				
					
						
							SELECT 
							  商品名, 売上金額, 
							  DECODE(SIGN(売上金額 - 5000),  
							   1, 'A',  
							   0, 'A',  
							   DECODE(SIGN(売上金額 - 2000), 1, 'B', 0, 'B', 'C') 
							  ) AS ランク 
							FROM 
							  売上表
						 | 
					 
				 
				※SIGNは引数がマイナスなら-1を、0なら0を、プラスなら1を返す関数 
				 
				--IIF(SQL Server)--
				
					
						
							SELECT 
							  商品名, 売上金額, 
							  IIF(売上金額 >= 5000, 'A', 
							    IIF(売上金額 >= 2000, 'B', 'C')) AS ランク 
							FROM 
							  売上表
						 | 
					 
				 
				 
				--IF(MySQL)--
				
					
						
							SELECT 
							  商品名, 売上金額, 
							  IF(売上金額 >= 5000, 'A', 
							    IF(売上金額 >= 2000, 'B', 'C')) AS ランク 
							FROM 
							  売上表
						 | 
					 
				 
				 
				[結果]
				
					
						| 商品名 | 
						売上金額 | 
						ランク | 
					 
					
						| りんご | 
						2500 | 
						B | 
					 
					
						| みかん | 
						1200 | 
						C | 
					 
					
						| ぶどう | 
						3000 | 
						B | 
					 
					
						| バナナ | 
						8000 | 
						A | 
					 
				 
				 
			 | 
			
				<<PR>>
				  
				価格:300円
				 
				  
				価格:300円
				 
				
					 
				 
				 
				
					 
				 
				 
			 |