Внешнее соединение - оракул - PullRequest
0 голосов
/ 10 февраля 2012

У меня есть 2 таблицы

Current Ecpense table
-----------------------

Month-----Type-------spent
Feb 12  Shopping   100 
Feb 12  Food       200
Jan 12  Shopping   456  
Jan 12  Food       452
Jan 12  Fuel       120
Jan 12  Rent       900

Previous Expense
-----------------------
Type------ spent 
Shopping   100
Food       100
Fuel       100
Rent       100

Теперь я хочу объединить эти две таблицы, ожидаемый результат:

Month-----Type-------spent-----Previous Spent
Feb 12  Shopping   100      100
Feb 12  Food       200      100
Feb 12  Fuel       0        100
Feb 12  Rent       0        100
Jan 12  Shopping   456      100
Jan 12  Food       452      100
Jan 12  Fuel       120      100
Jan 12  Rent       900      100

Есть ли способ сделать это?

Ответы [ 3 ]

0 голосов
/ 10 февраля 2012

Общий синтаксис Oracle

Выберите a. *, B.spent «предыдущая отправка» из current_expense a, previous_expense b, где a.type = b.type

или то же самое в стандарте

Выберите a. *, B.spent «предыдущая отправка» из current_expense в качестве внутреннего соединения previous_expense как b для a.type = b.type

0 голосов
/ 10 февраля 2012

Я склонен писать на SQL92 (больше SQLness и меньше Oracle-ness)
Вот мой ответ:

select
    z.month        as month          ,
    z.type         as type           ,
    nvl(c.spent,0) as spent          ,
    nvl(p.spent,0) as previous_spent
from
    (select 
       x.month as month ,
       y.type  as type
     from
        (select distinct month
         from current_expense) x
         cross join 
           (select distinct type 
            from current_expense) y) z
    left outer join current_expense c
    on z.month = c.month and
       z.type  = z.type
    left outer join previous_expense p
    on z.type = p.type;
0 голосов
/ 10 февраля 2012

Попробуйте:

select m.month,
       p.type,
       coalesce(c.spent,0) spent,
       p.spent previous_spent
from (select distinct month from current_expense) m
cross join previous_expense p
left join current_expense c 
       on m.month = c.month and p.type = c.type
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...