Oracle多表SQL查询

时间:2011-12-14 16:51:06

标签: oracle

我有四张桌子。表格如下。

inv_profile:

  accnt_no       ac_name1
    23            Prasun Kanti
    45            Babu

psdr_cds :(用于购买)

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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等。

HTH