"条件"加入不同的表

时间:2017-09-26 12:49:21

标签: sql-server join

我有3个数据库,我需要提取数据(让他们称之为DB1,DB2和DB3)。 从DB1我选择一个返回如下内容的查询:

ORDER      DESC      TOTAL    ORGANIZATION
=============================================
262     Order1    5129       116
629     Order2    123        138
915     Order3    95         138
159     Order4    1932       116

然后从DB2和DB3中选择此信息(两个表都相同,但来自不同组织的不同数据)

DB2(ORG 116):

ORDER     TYPE
==================
262      2
159      5
856      3
629      2

DB3(ORG 138):

ORDER     TYPE
==================
629      1
915      4
012      1
262      5

正如您所看到的,两个组织都可以使用相同的订单号,但类型不同。

如何将DB1与DB2和/或DB3连接以提取TYPE列,但是根据DB1组织列查找差异数据库?

结果如下:

ORDER      DESC      TOTAL    ORGANIZATION     TYPE
===========================================================
262     Order1    5129          116             2
629     Order2    123           138             1
915     Order3    95            138             4
159     Order4    1932          116             5

正如您所看到的,对于ORDER 262,我从DB2获得了Type 2(而不是来自DB3,因为ORG是116)而对于ORDER 629我从DB3获得了Type 1(而不是来自DB2,因为ORG是138)

我的简化查询就像这样(我使用WITH ... AS因为查询很长而且每个都来自不同的服务器,所以这样一切看起来都更有条理):

With EAM as (
Select Order, Desc, Total, Organization
from Table1
),
AP116 as (
select order, type
from table2
),
AP138 as (
select order, type
from table3
)
select *
from EAM inner join AP116 on EAM.order = AP116.order

此查询工作正常但链接所有订单与AP116。我需要使用CASE或其他东西让我选择AP116或AP138,具体取决于最后一行的ORG。

1 个答案:

答案 0 :(得分:2)

对于一组不同的数据库,我建议将其写为联合:

Select Order, Desc, Total, Organization, Table2.Type
from Table1
join Table2 on...
where Organization = 116

union

Select Order, Desc, Total, Organization, Table3.Type
from Table1
join Table3 on...
where Organization = 138