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');
错误:
转换varchar值时转换失败' Y'数据类型int。
两个表中的两列只有相同的数据类型(varchar)
。
答案 0 :(得分: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