SQL Server:按特定日期将数据从一个数据库插入到另一个数据库结构

时间:2019-06-28 13:42:51

标签: sql sql-server

我需要一些帮助以不同的模式将数据从一个数据库拉到另一个数据库中。我正在编写一个PHP脚本来实现这一点。

我的第一个查询是:

SELECT orderid, customerid, validation_date, test_type, test_result, amount 
WHERE test_type IN ('ph', 'bh')

我得到如下结果

1 101001 10-01-2018 bh 5 20.00
2 101001 10-01-2018 ph 3 25.00
3 101002 11-02-2018 bh 4 20.00
4 101002 11-02-2018 ph 2 25.00
5 101003 15-02-2018 bh 3 20.00
6 101003 15-02-2018 ph 4 25.00
7 101001 25-04-2018 bh 4 20.00
8 101001 25-04-2018 ph 2 25.00

我想针对每个特定日期将此数据一行插入到结构的另一个SQL Server表中。

另一个数据库的表架构如下:

itemid, customerid, validation_date, ph_value, bh_value 

所以我希望结果如下所示进入数据库:

1 101001 10-01-2018 3 5
2 101002 11-02-2018 2 4 
3 101003 15-02-2018 2 3 
4 101001 25-04-2018 2 4 

请问您如何使用SQL查询实现此建议?我做了一个选择,现在想以上述格式插入数据库

2 个答案:

答案 0 :(得分:0)

您可以按原样将数据上传到SQL Server,然后使用SQL引擎根据需要按摩

如果我们考虑两个值(ph,bh)可能不会同时出现的情况,那么您将需要FULL OUTER JOIN。您将需要创建一个新表和一个序列来产生插入,如:

create table my_table (
  id int, 
  customer_id int, 
  validation_date date, 
  ph_value real, 
  bh_value real
);

create sequence seq1; -- a sequence is needed to generate IDs.

然后可以生成您的数据的查询如下所示:

insert into my_table (id, customer_id, validation_date, ph_value, bh_value) 
select
  next value for seq1,
  coalesce(ph.customer_id, bh.customer_id),
  coalesce(ph.validation_date, bh.validation_date),
  ph.amount,
  bh.amount
from (select * from t where test_type = 'ph') ph
full outer join (select * from t where test_type = 'bh') bh 
  on ph.customer_id = bh.customer_id 
 and ph.validation_date = bh.validation_date

答案 1 :(得分:0)

您可以使用聚合来透视数据:

select customer_id, validation_date,
       max(case when test_type = 'ph' then ph.test_result end) as ph_value,
       max(case when test_type = 'bh' then ph.test_result end) as bh_value
from t
group by customer_id, validation_date;

目前尚不清楚itemid的来源。如果即时计算,我建议在目标表中有一个identity列。

然后,您可以使用SELECT . . . INTOINSERT将数据放入另一个表中。