Table1:
Col1 | Col2 | Col3
a1 | b1 | c1
a2 | b1 | c2
a3 | b2 | c3
Table2:
Col1 | Col2 | Col3
a1 | y1 | z1
a2 | y3 | z2
a3 | y3 | z3
事实是b1实际上对应于y1,但是它们不能被比较,因为它们不相同。 b2,b3也是如此。您可以参考以下代码来理解我的意思。
现在我想使用Col1和Col2在两个表上应用Inner Join。
我尝试了这段代码,但它不起作用。
SELECT Col1,
(CASE Col2
WHEN 'ENXTPAR_ID' THEN 'XPAR'
WHEN 'ENXTAMS_ID' THEN 'XAMS'
WHEN 'ENXTLIS_ID' THEN 'ENXL'
ELSE Col2
END) as Col2,
Col3
FROM Table1
INNER JOIN Table2
ON Table1.Col1= convert(varchar,Table2.Col1)
AND Table1.Col2 = Table2.Col2
我希望问题很清楚。
答案 0 :(得分:1)
我认为CASE
表达式需要处于ON
条件,而不是选择:
SELECT t1.*
FROM Table1 t1
INNER JOIN Table2 t2
ON t1.Col1 = CONVERT(varchar, t2.Col1) AND
t2.Col2 = CASE t1.Col2
WHEN 'ENXTPAR_ID' THEN 'XPAR'
WHEN 'ENXTAMS_ID' THEN 'XAMS'
WHEN 'ENXTLIS_ID' THEN 'ENXL'
ELSE t1.Col2 END;
上述逻辑假定您要将Table2.Col2
列与Table1.Col2
列的修改进行比较。例如,如果Table1
有ENXTPAR_ID
,那么匹配将与Table2
和值XPAR
匹配。如果我向后排列,那么您可以轻松切换CASE
表达式。
当然,这里最好的长期解决方案是设置可以映射相等的连接列,甚至可以在适当的位置添加索引。但是,有时我们会被其他人的数据集困住,我们必须应对这一点。