我想知道是否可以在CASE
上使用JOIN
语句,其中CASE
返回的参数属于不同类型。
我尝试用一个例子更好地解释我的问题:
我有2个表:TAB1
和TAB2
。
在table 2
的列中,我有一些参数除以管道字符" |"。
取决于我需要加入TAB1
的特定列的第一个参数的长度。但在一种情况下,TAB1
列的值为integer
,另一列为varchar
。
我试过了:
select *
from TAB1 as T1
inner join TAB2 as T2
on isnull(nullif(substring(T2.PARAM, 0, charindex('|', T2.PARAM, 1)),''), T2.PARAM) =
case
when len(isnull(nullif(substring(T2.PARAM, 0, charindex('|', T2.PARAM, 1)),''), T2.PARAM)) >= 16
then T1.CODFIS
when isnull(nullif(substring(T2.PARAM, 0, charindex('|', T2.PARAM, 1)),''), T2.PARAM) < 16
then T1.ID
end
但它返回错误:
转换varchar值时转换失败&#39; PAACPP70H41B296Y&#39;数据类型int。
答案 0 :(得分:0)
假设T1.ID
属于integer
类型。 input_expression
和每个when_expressio
n的数据类型必须相同或必须是隐式转化
SELECT *
FROM TAB1 AS T1
INNER JOIN TAB2 AS T2
ON Isnull(NULLIF(Substring(T2.PARAM, 0, Charindex('|', T2.PARAM, 1)), ''), T2.PARAM)
= CASE
WHEN Len(Isnull(NULLIF(Substring(T2.PARAM, 0, Charindex('|', T2.PARAM, 1)), ''), T2.PARAM)) >= 16 THEN T1.CODFIS
WHEN Isnull(NULLIF(Substring(T2.PARAM, 0, Charindex('|', T2.PARAM, 1)), ''), T2.PARAM) < 16 THEN CONVERT(VARCHAR(50), T1.ID)
END
END