SQL中的CASE语句

Mun*_*udi 2 sql sql-server

Select CASE WHEN loc ='J' THEN 'Y'
            WHEN loc NOT IN ('J') THEN 'N'
            ELSE 0 END AS loc FROM [prd].[dbo].[GRP]  
            EXCEPT
Select location FROM [prd1].[dbo].[GRPO] WHERE VALUE IN('Y','N');
Run Code Online (Sandbox Code Playgroud)

错误:

将varchar值'Y'转换为数据类型int时转换失败.

两个表中的两列(varchar)仅具有相同的数据类型.

Pரத*_*ீப் 5

Case语句从result_expressions中的类型集和可选的else_result_expression返回最高优先级类型.由于0 (INT)优先级高于Y (Varchar),Y因此隐式转换为INT您正在获得转换错误.

变化0(INT)到'0'(String)的ELSE声明

Select CASE WHEN loc = 'J' THEN 'Y'
            WHEN loc <> 'J' THEN 'N' -- loc NOT IN ('J')
ELSE '0' END
Run Code Online (Sandbox Code Playgroud)