SQL Server: вставка данных из одной базы данных в другую структуру базы данных к определенной дате - PullRequest
0 голосов
/ 28 июня 2019

Мне нужна помощь, чтобы перенести данные из одной базы данных в другую базу данных с другой схемой. Я пишу сценарий 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 голосов
/ 28 июня 2019

Вы можете использовать агрегацию для поворота данных:

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 . . . INTO, либо INSERT, чтобы поместить данные в другую таблицу.

0 голосов
/ 28 июня 2019

Вы можете загрузить свои данные на 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...