2015-04-28 2 views
0

У меня есть две таблицы tbl_inc t и tbl_expn. Все поля двух таблиц такие же, за исключением первичного ключа Я хочу получить сумму, чтобы отобразить график в течение месяца в году с суммой (t.amount) и суммой (d.amount) на каждый день. У меня есть несколько сумм за один день. Следующий код не складывает сумму за каждый деньЯ пытаюсь получить данные из двух таблиц SQL Oracle 10g

select extract(day from t.date_id) as tday, 
extract(month from t.date_id) as mon, 
extract(year from t.date_id) as yr, 
t.amount as incamt, 
d.amount as expamt 
from tbl_inc t,tbl_expn d 
where t.user_id=d.user_id and 
t.user_id='222' and 
extract(month from t.date_id)='04' and 
extract(month from d.date_id)='04' and 
extract(year from t.date_id)='2015' and 
extract(year from d.date_id)='2015' and 
extract(day from t.date_id)=extract(day from d.date_id) 
order by t.date_id 

Результат для этого кода это

TDAY MON YR  INCAMT EXPAMT 
29  4 2015 50  600 
29  4 2015 100  200 
29  4 2015 50  200 
29  4 2015 100  600 
30  4 2015 70  700 
30  4 2015 30  500 
30  4 2015 70  700 
30  4 2015 30  500 

Я хочу вывод как

TDAY MON YR  INCAMT EXPAMT 
29  4 2015 150  800 
30  4 2015 100  1200 

, пожалуйста, помогите ..

+0

если вы используете оракул, почему вы отмечаете это SQL Server? –

+0

Можете изменить этот код, используя JOIN. Я не знаю, как это сделать :-( –

ответ

-1

если ваш date_id не имеет времени, вы можете отказаться от trunc. trunc отбрасывает время, если он будет там.

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

select extract(day from t.date_id) as tday 
    , ta as incamt 
    , da as expamt 
    , t.*, d.* 

from (select trunc(date_id) date_id, user_id, sum(amount) ta from t group by trunc(date_id), user_id) t 
    , (select trunc(date_id) date_id, user_id, sum(amount) da from d group by trunc(date_id), user_id) d 
where t.user_id = d.user_id 
    and t.date_id = d.date_id 

    and t.user_id=1 
    and extract(month from t.date_id)='04' 
    and extract(year from t.date_id)='2015' 

order by extract(day from t.date_id) 

Вы ничего не писали о количестве строк, которые у вас есть, но вам потребуется указатель на обе таблицы. я предлагаю user_id, extract(month from date_id), extract(year from date_id) на один и user_id, trunc(date_id) на другой

см http://sqlfiddle.com/#!4/83efc/6

+0

Я не получаю выход по мере необходимости. Если для каждого стола есть две суммы, то выезд удваивается Если их три, то их трижды Работает только на одном уровне в этот день –

+0

Теперь я понимаю вашу проблему. –

0

Похоже, вам нужны SUM и GROUP BY Дайте это попробуйте:

select 
    extract(day from t.date_id) as tday, 
    extract(month from t.date_id) as mon, 
    extract(year from t.date_id) as yr, 
    SUM(t.amount) as incamt, 
    SUM(d.amount) as expamt 
from tbl_inc t,tbl_expn d 
where t.user_id=d.user_id and 
    t.user_id='222' and 
    extract(month from t.date_id)='04' and 
    extract(month from d.date_id)='04' and 
    extract(year from t.date_id)='2015' and 
    extract(year from d.date_id)='2015' and 
    extract(day from t.date_id)=extract(day from d.date_id) 
GROUP BY extract(day from t.date_id), extract(month from t.date_id), extract(year from t.date_id) 
order by t.date_id 

Вы также хотите изменить ваш from tbl_inc t,tbl_expn d к правильному JOIN, чтобы избежать дубликатов.

+0

ORA-00979: не выражение GROUP BY Появляется! :-( –