найти недостающие записи в соответствующих таблицах - PullRequest
0 голосов
/ 27 апреля 2020

Допустим, у меня есть две временные таблицы с данными, которые выглядят следующим образом ...

 #Temp1
 Id   IDNo       CdId       ApptDate        Proc
 1    X111       PP         3/3/2020        N
 2    X222       ZZ         3/3/2020        N
 3    X333       HH         3/3/2020        Y


 #Temp2
 ID  IDNo      CdID        ApptDate        Proc
 1   X111      PP          3/3/2020        Y
 2   X222      ZZ          3/3/2020        N
 3   X333      HH          3/3/2020        Y
 4   X444      BB          3/5/2020        Y

Вот что я пытаюсь достичь

1) Исключить все записи из # TEMP1 и # TEMP2 с одинаковым соответствием для IdNO, CdId, ApptDate, PROC = Y

Мне интересно только найти эти сценарии ios:

1) Найти запись из # Temp1 или # Temp2, который соответствует всем столбцам, кроме PRO C. Так, например, # Temp1 имеет соответствующую запись в # Temp2. # Temp1 имеет PROC = N, а # Temp2 имеет PROC = Y, поэтому покажите запись в # TEMP1 и добавьте столбец, такой как DES C = 'Запись TEMP1 имеет Proc = N'

2) Если # TEMP1 Или # TEMP2 не имеет соответствующей записи ни в одной из таблиц, затем покажите эту запись как DES C = 'TEMP1 не имеет этой записи), или наоборот.

3) Если совпадающие записи существуют в обоих таблицы, но обе записи имеют PROC = N, затем показывают обе записи с сообщением «Запись Temp1 имеет Proc = N», а запись Temp2 имеет Pro c = N '

ALl во всех результатах, которые я в надежде добиться этого:

ID    IdNo           CdID          ApptDate        DESC
 1    X111           PP            3/3/2020        'TEMP1 has Proc = N'
 2    X222           ZZ            3/3/2020        'TEMP1 has PROC = N'
 3    X222           ZZ            3/3/2020        'TEMP2 has PROC = N'
 4    X444           BB            3/5/2020        'TEMP 1 Does not have matching record'

В приведенных выше результатах

Строка 1: эта запись существует в # Temp1 и # Temp2, но # Temp1 Pro c = N

Строка 2,3: эта запись существует в # Temp1 и # Temp2, но в обоих случаях PRO C = N

Строка 4: эта запись существует в # Temp2, но не существует в # Temp1

Ответы [ 2 ]

1 голос
/ 27 апреля 2020

Вы также можете использовать JOIN, вот демоверсия . Я поставил условие в случае statement, если записи в обеих таблицах имеют PROC = Y.

select
    Id,
    IDNo,
    CdId,
    ApptDate,
    case 
        when (t1_proc = 'N' and t2_proc = 'Y') or (t1_proc = 'Y' and t2_proc = 'N')  then 'TEMP1 has Proc = N'
        when (t1_proc = 'N' and t2_proc = 'N')
        then 'Temp1 record has Proc=N and Temp2 record has Proc = N'
        when (t1_proc = 'Y' and t2_proc = 'Y')
        then 'Temp1 record has Proc=Y and Temp2 record has Proc = Y'
        else
        'TEMP 1 Does not have matching'
    end as desc     
from 
(
  select
      a.Id,
      a.IDNo,
      a.CdId,
      a.ApptDate,
      a.proc as t2_proc,
      b.proc as t1_proc
  from table2 a
  left join table1 b
  on a.id = b.id
  and a.IDNo = b.IDNo
  and a.CdId = b.CdId
  and a.ApptDate = b.ApptDate
) vals
order by
    Id
1 голос
/ 27 апреля 2020

Хммм. , , Я думаю, что логика c вы хотите использовать union all:

select t1.idno, t1.cdid, t1.apptdate,
       (case when t2.idno is not null then 'Temp1 has proc N'
             when t2.idno is null then 'Temp2 is missing' end)
from table1 t1 left join
     table2 t2
     on t1.idno = t2.idno and t1.cdid = t2.cdid and t1.apptdate = t2.appdate
where t1.proc = 'N'
union all
select t2.idno, t2.cdid, t2.apptdate,
       (case when t1.idno is not null then 'Temp2 has proc N'
             when t1.idno is null then 'Temp1 is missing' end)
from table1 t2 left join
     table2 t1
     on t1.idno = t2.idno and t1.cdid = t2.cdid and t1.apptdate = t2.appdate
where t2.proc = 'N';
...