即使两个都是NVARCHAR2(50),也会得到不匹配错误。他们看起来很好分开。
select O.MEDIC_NO
,O.PRO_TIN
,CASE WHEN O.MEDIC_NO IS NULL THEN '' ELSE O.PRO_TIN END AS PRO_TIN_PREVIOUS
from Q119 o
答案 0 :(得分:4)
问题可能是字符串文字不是NVARCHAR2(50)。 CASE的每个分支都需要返回相同类型的值。
select O.MEDIC_NO
,O.PRO_TIN
,CASE WHEN O.MEDIC_NO IS NULL THEN cast('' as NVARCHAR2(50))
ELSE O.PRO_TIN END AS PRO_TIN_PREVIOUS
from Q119 o
答案 1 :(得分:1)
CASE WHEN的THEN列表中的第一项确定列表其余部分使用的字符集/数据类型。这是空字符串(可能是VARCHAR2),而您的O.PRO_TIN不是相同的字符集/数据类型(不兼容)
尝试将空搅拌器转换为与O.PRO_TIN相同的类型,或尝试交换逻辑以使O.PRO_TIN优先(CASE WHEN x IS NOT NULL THEN O.PRO_TIN ELSE '' END
)