我需要加入2个数据库,每个数据库有2个表

时间:2018-05-20 22:12:32

标签: sql vb.net ms-access

逗人, 我有一个SQL问题。我需要加入2个数据库,每个数据库有2个表。我在这里有数据库表格的图片。非常感谢您的帮助。

enter image description here

1 个答案:

答案 0 :(得分:1)

使用UNION ALL,您可以从2个选项中获得1个组合结果集 然后,您可以对该组进行分组,并按日期计算金额。

所以你可能正在寻找这样的东西:

select 
 q.ID,
 q.Name,
 nullif(sum(case when q.Date = '2018-05-01' then q.Amount end), 0) as "5/1/2018",
 nullif(sum(case when q.Date = '2018-05-02' then q.Amount end), 0) as "5/2/2018"
from
(
  select u1.ID, u1.Name, a1.Date, a1.Amount
  from DB1.Table1 AS u1
  join DB1.Table2 AS a1 on (a1.ID = u1.ID and a1.Amount is not null)
  where a1.Date IN ('2018-05-01', '2018-05-02')

  union all -- combines the results of the 2 selects into one resultset

  select u2.ID, u2.Name, a2.Date, a2.Amount
  from DB2.Table1 AS u2
  join DB2.Table2 AS a2 on (a2.ID = u2.ID and a2.Amount is not null)
  where a2.Date IN ('2018-05-01', '2018-05-02')
) AS q
group by q.ID, q.Name
order by q.ID;

另一种方法是将它们全部加入。

select 
coalesce(a1.ID, a2.ID) as ID,
max(coalesce(u1.Name, u2.Name)) as Name, 
max(case 
    when coalesce(a1.Date, a2.Date) = '2018-05-01'
     and coalesce(a1.Amount, a2.Amount) is not null
    then coalesce(a1.Amount, 0) + coalesce(a2.Amount, 0) 
    end) as "5/1/2018",
max(case 
    when coalesce(a1.Date, a2.Date) = '2018-05-02'
     and coalesce(a1.Amount, a2.Amount) is not null
    then coalesce(a1.Amount, 0) + coalesce(a2.Amount, 0) 
    end) as "5/2/2018"
from DB1.Table2 AS a1 
full join DB2.Table2 AS a2 on (a2.ID = a1.ID and a2.Date = a1.Date)
left join DB1.Table1 AS u1 on (u1.ID = a1.ID)
left join DB2.Table1 AS u2 on (u2.ID = a2.ID)
where coalesce(a1.Date, a2.Date) IN ('2018-05-01', '2018-05-02')
group by coalesce(a1.ID, a2.ID)
order by coalesce(a1.ID, a2.ID);

但是请注意这样,假设两个Table2在(ID,Date)上具有唯一性

  

T-Sql测试数据:  声明@ DB1_Table1表(id int,Name varchar(30));  声明@ DB2_Table1表(id int,Name varchar(30));  声明@ DB1_Table2表(id int,[Date] date,Amount decimal(8,2));  声明@ DB2_Table2表(id int,[Date] date,Amount decimal(8,2));  插入@ DB1_Table1(id,Name)值(1,' Susan'),(2,' Juan'),(3,' Tracy'),( 4,'珍妮'),(5,'比尔&#39);  插入@ DB2_Table1(id,Name)值(1,' Susan'),(2,' Juan'),(3,' Tracy'),( 4,'珍妮'),(5,'比尔&#39);  插入@ DB1_Table2(id,[Date],Amount)值  (1,' 2018年5月1日' 20),(2,' 2018年5月1日',空),(3,' 2018年5月1日及#39; 30),(4,' 2018年5月1日' 50),(5,' 2018年5月1日',空),  (1,' 2018年5月2日' 15),(2,' 2018年5月2日' 40),(3,' 2018年5月2日& #39; 25),(4,' 2018年5月2日',8),(5,' 2018年5月2日',NULL);  插入@ DB2_Table2(id,[Date],Amount)值  (1,' 2018年5月1日',空),(2,' 2018年5月1日' 15),(3,' 2018年5月1日及#39; 20),(4,' 2018年5月1日' 10),(5,' 2018年5月1日',空),  (1,' 2018年5月2日' 15),(2,' 2018年5月2日' 30),(3,' 2018年5月2日& #39; 35),(4,' 2018年5月2日',空),(5,' 2018年5月2日' 30);