Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle多表SQL查询_Oracle - Fatal编程技术网

Oracle多表SQL查询

Oracle多表SQL查询,oracle,Oracle,我有四张桌子。各表如下所示 库存档案: accnt_no ac_name1 23 Prasun Kanti 45 Babu psdr_CD:(用于购买) swr_CD(用于销售) 公司 现在,我需要返回以下结果的sql查询: Accnt_no Name Total Buy Total Sale Balance 23 Prasun Kanti

我有四张桌子。各表如下所示

库存档案:

  accnt_no       ac_name1
    23            Prasun Kanti
    45            Babu
psdr_CD:(用于购买)

swr_CD(用于销售)

公司

现在,我需要返回以下结果的sql查询:

  Accnt_no     Name             Total Buy     Total Sale      Balance

     23        Prasun Kanti     60           50                10
     45        Babu             70           20                50
行。但是还有很多其他的方法,例如通过进行分区等


HTH

尊敬的先生,谢谢您的回复。如果表格包含更多数据,则结果包含无效数据。事实上,我想根据comp_cd,trans_dt条件搜索结果。您能验证一下吗。@prasun您在问题中没有提到这一点,但您可以轻松地将另一个
JOIN
添加到
comp
表中,并使用
WHERE
子句过滤数据。我建议你看看SQL入门教程,比如帮助你。亲爱的先生,你能给你邮件id吗?然后我可以发送4个表的数据,你可以很容易地理解问题是什么。我运行了您的查询,但它没有显示有效的总购买、总销售和余额。假设psdr_CD包含128条记录,而swr_CD包含123条记录,则您的查询仅显示基于swr_CD的123行。亲爱的先生,此查询显示此报表用户请求的中断或检测到EOF。然后您中断了查询和/或丢失了数据库连接。
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
  Accnt_no     Name             Total Buy     Total Sale      Balance

     23        Prasun Kanti     60           50                10
     45        Babu             70           20                50
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
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