你能帮忙解决这个问题吗?我需要SQL查询以满足以下要求。
我有三张桌子。
表1
--------
ExNo | ExTyp
-------------
1000 | CONT
2000 | REPO
3000 | COMD
4000 | CONT
表2
------
ExNo | ExTyp
-------------
1000 | RVRP
2000 | COMD
3000 | CONN
表3
-------
ExCode| ExTyp | ExDesc
-----------------------
ExTyp | CONT | Contain
ExTyp | COMD | command
ExTyp | RVRP | Reverse Post
ExTyp | CONN | Connection
ExTyp | REPO | Re Open
主表是Table1。所以我的要求是只需要根据Table1.ExTyp = Table3.ExTyp
打印Table1.ExNo的Table3.ExDesc第二个条件,如果Table1.ExTyp = CONT(仅适用于此CONT),那么我必须转到Table2并获得相应的Table2.ExTyp基于ExNo匹配,然后获取Table2.ExDesc for Table2.ExTyp。 (ExNo示例:1000)
第三个条件,包括Table1.ExNo不存在于Table2.ExNo for ExTyp = CONT,那么我应该在Table3中打印相同的CONT ExDesc,这是ExDesc ="包含" (例如:ExNo:4000)
需要的示例结果集:
ExNo | ExDesc
---------------
1000 | Reverse Post
2000 | Re Open
3000 | Command
4000 | Contain
如果您需要更多详细信息,请与我们联系。
答案 0 :(得分:0)
您可以将table2与table1连接起来,并有条件地将table3与它连接。
select t1.ExNo,
t3.ExDesc
from table1 t1
left join table2 t2 on t1.ExNo = t2.ExNo
join table3 t3 on t3.ExTyp = case
when t1.ExTyp = 'CONT'
and t2.ExTyp is not null
then t2.ExTyp
else t1.ExTyp
end
order by t1.ExNo;
产地:
ExNo ExDesc
--------------------
1000 Reverse Post
2000 Re Open
3000 command
4000 Contain