Вставьте два столбца в таблицу на основе оператора выбора и два на основе логики - PullRequest
0 голосов
/ 21 октября 2019

Я пытаюсь сравнить столбцы в таблице и вставить данные на основе нескольких условий. Есть 4 столбца, которые необходимо вставить, два из них будут взяты из таблицы, упомянутой ниже, один - общая точка данных, а последний - на основе логики.

Таблица 1: Основная таблица называется [CNAM отPOST]

Date        MDN           Name      Product
2019-10-03  18992   Hardeep Chawla  CNAM
2019-10-01  18993   Preeti Chawla   CNAM
2019-10-01  18994   Neelam Chawla   CNAM
2019-10-02  24363   Surinder Chawla CNAM

Таблица вторая: это таблица, которая ежедневно выгружается в БД:

dDate      MMDN      NName         Pproduct
2019-10-06  18993   Preeti Chawla   CNAM
2019-10-06  18994   Neelam Chawla   
2019-10-06  18996   HC  CNAM
2019-10-02  24363   Surinder Chawla CNAM

Нам нужно сравнить эти две таблицы и поместить данные в третью. Таблица плюс обновить основную таблицу только определенными записями.


Для этого:

Я создаю третью промежуточную таблицу, объединяя первые две:

select A.*, B.* into CNAM_staging from [CNAM from POST] as A Full join CNAM_file as B on (A.MDN = b.MMDN)

Встроенное изображение

Это третий и последний стол.

  • ResellerpartnerID всегда 12345
  • Индикатор имеет три значения: U, I и D на основе логики (U - обновление, I - вставка и D -это удалить)

ResellerPartnerID MDN Индикатор CustomerName. Логика и запросы следующие:

select MMdn, Nname
from CNAM_staging
where MDN is null -- Indicator field is 'I' and this record (4 fields form CNAM_file) needs to be added to primary table (CNAM FROM POST)

select MMdn, Nname
from CNAM_staging
where  Pproduct = ''
   and MDN = MMDN -- Indicator field is 'D'  Indicator field is 'I' and this record (4 fields form CNAM_file) needs to be removed from the primary table (CNAM FROM POST)

select MMdn, Nname
from CNAM_staging
where MDN = MMDN
   and ddate > Date
   and pproduct ! = ''  -- Indicator field is 'U' and this record needs to be updated in CNAM from POST

Мне нужна финальная таблица в конце логики и обновление основной таблицы записями, упомянутыми только в логике

1 Ответ

0 голосов
/ 21 октября 2019

Вы, вероятно, хотите попробовать как это: ( Протестировано с скрипкой )

With Staging as 
(select Date_, MDN, Name, Product 
from [CNAM from POST]
union
select Date_, MDN, Name, Product 
from Table2
)

select * into CNAM_Staging from Staging;

--- INSERT --------------------------------------------
Insert into [CNAM from POST] (Date_, MDN, Name, Product)
select s.Date_, s.MDN, s.Name, s.Product 
from CNAM_Staging as s 
     join [CNAM from POST] as d on s.MDN = d.MDN
where D.MDN is null 

--- DELETE --------------------------------------------
delete from d 
from [CNAM from POST] as d 
     join CNAM_Staging as s on d.MDN = s.MDN
where (s.product = '' or s.product is null)

--- UPDATE --------------------------------------------
update d set 
       d.Date_ = s.Date_,
       d.Name = s.Name,
       d.Product = s.Product
from [CNAM from POST] as d 
     join CNAM_Staging as s on d.MDN = s.MDN
where (not s.product = '' or s.product is not null) AND s.date_ > d.date_


Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...