【发布时间】:2017-09-26 12:49:20
【问题描述】:
我有 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 组织的列寻找不同的 DB?
结果会是这样的:
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 或其他东西让我根据最后一行的 ORG 选择 AP116 或 AP138。
【问题讨论】:
-
LEFT JOIN到所有表,只需使用CASE语句选择您需要的值?
标签: sql-server join