2011-12-14 3 views
-2

4 개의 테이블이 있습니다. 표는 아래에 나와 있습니다.Oracle 다중 테이블 SQL 쿼리

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 
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 

할 것 :

comp_cd  comp_nm 
     101   AB BANK 

빌려 지금 나는 다음과 같은 결과를 반환하는 SQL 쿼리를해야합니다. 그러나 다른 많은 방법이 있습니다. over partition by

HTH

+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 질문에 언급하지 않았지만'comp' 테이블에 다른 JOIN을 쉽게 추가하고 WHERE 절을 사용하여 데이터를 필터링 할 수 있습니다. 나는 당신이 http://www.w3schools.com/sql/sql_intro.asp와 같은 입문 SQL 튜토리얼을 보길 추천한다. – Graham

+0

친애하는 선생님, 친절하게도 당신에게 메일 ID를 알려 주시면 4 테이블 데이터를 보낼 수 있으며 문제가 무엇인지 쉽게 이해할 수 있습니다. 유효한 총 구매액, 총 판매액이 Balance.Suppose psdr_cds에 128 개의 레코드가 있고 swr_cds에 123 개의 레코드가 포함 된 쿼리를 실행 한 다음 swr_cds를 기반으로 한 123 개의 행만 표시합니다. – prasun