Sql 可选择加入
我有两张桌子:Sql 可选择加入,sql,oracle,oracle11g,Sql,Oracle,Oracle11g,我有两张桌子: Table1 - Criteria Office_ID Bus_Stream Bus_Criteria Crit_Value 1 ABC 0 20 1 ABC 1 21 1 ABC 2 7 2 ABC 0 15 2 ABC
Table1 - Criteria
Office_ID Bus_Stream Bus_Criteria Crit_Value
1 ABC 0 20
1 ABC 1 21
1 ABC 2 7
2 ABC 0 15
2 ABC 1 12
2 ABC 2 21
3 XYZ 1 17
3 XYZ 2 3
Table2 - Limit
Bus_Stream GroupID TypeID SubgroupID Bus_Limit
ABC 20 21 7 50
ABC 15 12 21 100
XYZ 99 17 3 120
我需要创建一个允许我向后拉的连接:
Result
Bus_Stream Office_ID GroupID TypeID SubgroupID Bus_Limit
ABC 1 20 21 7 50
ABC 2 15 12 21 100
XYZ 3 (null) 17 3 120
基本上,我需要基于以下内容加入Table1.Crit_值:
Table1.Bus_Criteria Table2
0 GroupID
1 TypeID
2 SubGroupID
更复杂的是,如果Bus_标准中的一个或两个0/1/2值丢失,则连接仍将发生在其余标准上
我在连接上尝试了许多和/或的组合,但均无效
各位有什么想法吗?这可能就是你们想要的。。在联接上使用case语句 这里的问题是t2中的数据没有标准化,您还可以取消对t2中的3个数据列的绑定,以便更自然地进行连接
SELECT T2.Bus_Stream, T1.Office_ID, T2.GroupID, T2.TypeID, T2.SubGroupId, T2.bus_Limit
FROM T1
INNER JOIN T2
on T1.Bus_Stream = T2.Bus_Stream
and T1.Crit_value = case when T1.Bus_Critiera = 0 then T2.GroupID
when T1.Bus_Critiera = 1 then T2.TypeID
when T1.Bus_Critiera = 2 then T2.SubGroupID
end
这可能就是你想要的。。在联接上使用case语句 这里的问题是t2中的数据没有标准化,您还可以取消对t2中的3个数据列的绑定,以便更自然地进行连接
SELECT T2.Bus_Stream, T1.Office_ID, T2.GroupID, T2.TypeID, T2.SubGroupId, T2.bus_Limit
FROM T1
INNER JOIN T2
on T1.Bus_Stream = T2.Bus_Stream
and T1.Crit_value = case when T1.Bus_Critiera = 0 then T2.GroupID
when T1.Bus_Critiera = 1 then T2.TypeID
when T1.Bus_Critiera = 2 then T2.SubGroupID
end
你试过这样的吗
SELECT
t1.*, t2.*
FROM Table1 t1
INNER JOIN Table2 t2 ON
t1.Bus_Stream = t2.Bus_Stream AND
CASE
WHEN t1.Bus_Criteria = 0
THEN t2.GroupID = t1.Crit_Value
WHEN t1.Bus_Criteria = 1
THEN t2.TypeID = t1.Crit_Value
ELSE
t2.SubGroupID = t1.Crit_Value
END
你试过这样的吗
SELECT
t1.*, t2.*
FROM Table1 t1
INNER JOIN Table2 t2 ON
t1.Bus_Stream = t2.Bus_Stream AND
CASE
WHEN t1.Bus_Criteria = 0
THEN t2.GroupID = t1.Crit_Value
WHEN t1.Bus_Criteria = 1
THEN t2.TypeID = t1.Crit_Value
ELSE
t2.SubGroupID = t1.Crit_Value
END
您是否尝试过左外联接?如果总线标准中的0/1/2值丢失,则联接仍将发生在其他两个标准上,这增加了复杂性。:我不明白。还有什么其他条件?可能您需要在联接上使用case语句。您是否尝试了
外部左联接
?如果缺少来自Bus_条件的0/1/2值,则联接仍将在其他2个条件上发生。我不明白。还有什么其他标准?也许您需要在连接上使用case语句。