SQL Join на условии где - PullRequest
       18

SQL Join на условии где

2 голосов
/ 11 марта 2019

Как мне объединить эти две таблицы

select m.caseno,
sum(m.BalanceAmount) GOVT from TABLE1 m
inner join TABLE2 g on m.Code = g.Code
where g.alpha in ('a','b','c') 
group by m.caseno

OUTPUT CASE |ПРАВИТЕЛЬСТВО

select m.caseno,
sum(m.BalanceAmount) MIF from TABLE1 m
inner join TABLE2 g on m.Code = g.Code
where g.alpha in ('d','e')
group by m.caseno

ВЫХОДНОЙ СЛУЧАЙ |MIF

Я хочу, чтобы они присоединились к одному запросу. CASE |Правительство |MIF

Ответы [ 3 ]

3 голосов
/ 11 марта 2019

Если вы не хотите трогать существующие запросы, вы можете сделать с ними FULL OUTER JOIN:

select
  coalesce(a.caseno, b.caseno) as caseno,
  a.govt,
  b.mif
from ( -- first query
  select m.caseno,
  sum(m.BalanceAmount) GOVT from TABLE1 m
  inner join TABLE2 g on m.Code = g.Code
  where g.alpha in ('a','b','c') 
  group by m.caseno
) a
full outer join ( -- second query
  select m.caseno,
  sum(m.BalanceAmount) MIF from TABLE1 m
  inner join TABLE2 g on m.Code = g.Code
  where g.alpha in ('d','e')
  group by m.caseno
) b on a.caseno = b.caseno

Необходим FULL OUTER JOIN, а также COALESCE() -- объединить несоответствующие строки, которые могут отображаться в любом запросе.

1 голос
/ 11 марта 2019

вариант использования, когда показывать как 2 столбца.

select m.caseno,
sum(case when g.alpha in ('d','e') then m.BalanceAmount else 0 end)  MIF ,
sum(case when g.alpha in ('a','b','c') then m.BalanceAmount else 0 end)  GOVT 
from TABLE1 m
inner join TABLE2 g on m.Code = g.Code
where g.alpha in ('a','b','c','d','e')
group by m.caseno
0 голосов
/ 11 марта 2019

Вы должны выполнить полное внешнее объединение, я думаю. попробуйте это.

SELECT *
FROM (
  select m.caseno,
    sum(m.BalanceAmount) GOVT from TABLE1 m
  inner join TABLE2 g on m.Code = g.Code
  where g.alpha in ('a','b','c') 
  group by m.caseno
) AS tab1
FULL OUTER JOIN (
  select m.caseno,
    sum(m.BalanceAmount) MIF from TABLE1 m
  inner join TABLE2 g on m.Code = g.Code
  where g.alpha in ('d','e')
  group by m.caseno
) AS tab2 
  ON tab2.caseno = tab1.caseno
...