2011-12-14 4 views
-2

У меня есть четыре таблицы. Таблицы приведены ниже.Oracle multi table SQL-запрос

inv_profile:

accnt_no  ac_name1 
    23   Prasun Kanti 
    45   Babu 

psdr_cds: (Используйте для Buy)

accnt_no  no_shares   trans_dt   comp_cd 
23    40    1-jan-2006   101 
45    70    11-dec-2011  101 
23    20    1-nov-2011   101 

swr_cds (Используйте для продажи)

accnt_no  no_shares   trans_dt  comp_cd 
    23    20    1-jan-2007  101 
    45    20    12-dec-2011  101 
    23    30    15-nov-2011  101 

комп

comp_cd  comp_nm 
     101   AB BANK 

Теперь мне нужен SQL запрос, который вернет следующий результат:

Accnt_no  Name    Total Buy  Total Sale  Balance 

    23  Prasun Kanti  60   50    10 
    45  Babu    70   20    50 

ответ

0
with t as 
(select ip.accnt_no, ip.ac_name1, ps.no_shares buy, sw..no_shares sale 
    from inv_profile ip, psdr_cds ps, swr_cds sw 
    where ip.accnt_no = ps.accnt_no) 
select t.accnt_no Accnt_no, 
     t.ac_name1 Name, 
     sum(t.buy) Total_buy, 
     sum(t.sale) Total_sale 
     (sum(t.buy)-sum(t.sale)) Balance 
    from t 
group by t.accnt_no, t.ac_name1 

будет делать. Но есть много других способов, например. over partition by и т.д.

НТН

+0

Уважаемый сэр, Этот запрос показан этот отчет-пользователь запросил прерывание или EOF обнаружено. – prasun

+1

Затем вы прервали запрос и/или потеряли соединение с базой данных. –

1
SELECT 
    i.acct_no AS "Accnt_no", 
    i.ac_name1 AS "Name", 
    SUM(p.no_shares) AS "Total Buy", 
    SUM(s.no_shares) AS "Total Sale", 
    SUM(p.no_shares) - SUM(s.no_shares) AS "Balance" 
FROM inv_profile i 
INNER JOIN psdr_cds p ON i.accnt_no = p.accnt_no 
INNER JOIN swr_cds s ON i.accnt_no = s.accnt_no 
GROUP BY i.acct_no, i.ac_name1 
+0

Уважаемый сэр, Спасибо за ваш ответ. Если таблицы содержат больше данных, тогда результат содержит недопустимые данные. На самом деле я хочу искать результат в отношении comp_cd, условие trans_dt. Не могли бы вы подтвердить это. – prasun

+0

@prasun вы не упомянули об этом в своем вопросе, но вы можете легко добавить еще одну команду 'JOIN' в таблицу' comp' и отфильтровать данные с помощью предложения WHERE. Я предлагаю вам ознакомиться с вводным учебником по SQL, таким как http://www.w3schools.com/sql/sql_intro.asp, чтобы помочь вам. – Graham

+0

Уважаемый сэр, можете ли вы любезно предоставить вам идентификатор почты, тогда я могу отправить данные из четырех таблиц, и вы можете легко понять, в чем проблема. Я запустил ваш запрос, чтобы он не показывал действительную общую сумму покупки, общую продажу также Balance.Suppose psdr_cds содержит 128 записей, а swr_cds содержит 123 записи, тогда ваш запрос отображает только 123 строки на основе swr_cds. – prasun