Объединение двух таблиц схожей структуры - PullRequest
0 голосов
/ 08 ноября 2018

У меня есть 2 таблицы одного типа: T1 и T2 с 4 столбцами (дата, флаг, статус, количество). Я хочу взять разницу значений в таблицах. Использую запрос ниже

`Select 
T1.date,
T1.flag,
T1.status,
T1.counts,
T2.counts
(T1.count-T2counts)as difference 
From T1
Left join T2
On T1.date=T2.date
And T1.flag=T2.flag
And T1.status=T2.status
`

, но не может получить требуемый результат. Любой совет будет оценен. Примерные данные и требуемый вывод приведены ниже enter image description here

Ответы [ 2 ]

0 голосов
/ 09 ноября 2018

В вашем запросе было несколько опечаток. Я изменил его и добавил оператор WITH, чтобы я мог использовать примеры данных. Результаты выглядят хорошо.

with T1 (mydate, flag, status, counts) as (select trunc(sysdate), 'Cat1', 1, '100' 
from dual), 
    T2 (mydate, flag, status, counts) as (select trunc(sysdate), 'Cat1', 1, '50' 
from dual)
Select 
T1.mydate,
T1.flag,
T1.status,
T1.counts T1Count,
T2.counts T2Count,
(T1.counts-T2.counts)as difference 
From T1
left join T2
On T1.mydate=T2.mydate
And T1.flag=T2.flag
And T1.status=T2.status
0 голосов
/ 08 ноября 2018

Вы можете использовать union all и group by, чтобы суммировать, что находится в каждой таблице:

select Date, flag, status, sum(count1) as count1, sum(count2) as count2,
       ( sum(count1) - sum(count2) ) as diff
from ((select Date, flag, status, counts as count1, 0 as count2 from table1) union all
      (select Date, flag, status, 0, counts as count2 from table1)
     ) tt
group by Date, flag, status;
...