2011-12-15 302 views
1

查詢1:SQL查詢幫助需要

select accnt_no,sum(no_shares)Buy from psdr_cds 
where accnt_no between 1 and 9999 
and trans_dt between '1-jan-2000' and '1-dec-2011' 
and comp_cd=101 group by accnt_no; 

QUERY2:

select accnt_no,sum(no_shares)Sell from swr_cds 
where accnt_no between 1 and 9999 
and trans_dt between '1-jan-2000' and '1-dec-2011' 
and comp_cd=101 group by accnt_no; 

最終查詢:

select i.accnt_no,i.ac_name1 from inv_profile i 
where i.accnt_no in(select accnt_no from psdr_cds 
where accnt_no between 1 and 9999 
and trans_dt between '1-jan-2000' and '1-dec-2011' 
and comp_cd=101 
union 
select accnt_no from swr_cds 
where accnt_no between 1 and 9999 
and trans_dt between '1-jan-2000' and '1-dec-2011' 
and comp_cd=101) 

使用QUERY1,QUERY2和最終查詢我公司生產的result-

 
accnt_no ac_name1   Buy   Sell  Balance 
12   Prasun   300   150   150 
34   Abc    300   0   300 

現在我想使用單個查詢返回相同的結果,而不是這三個查詢。 任何人都可以幫助我嗎?

+0

問題不明確從哪裏得到買,賣,平衡? –

+0

購買(psdr_cds)-Sell(swr_cds) – prasun

+1

之間的差額是很難遵循這個問題。例如,「最終查詢」中的聯合看起來會產生一個錯誤(選擇不同數量的字段),而且我無法確切地知道您在哪裏獲得「購買」,「銷售」 ,和結果表中的「平衡」。你認爲你可以澄清一點嗎? –

回答

4

沒有你的數據或模式我真的不能測試,但我認爲這可能做到這一點:

SELECT i.accnt_no,i.ac_name1 
FROM inv_profile i 
LEFT JOIN psdr_cds p ON p.accnt_no = i.accnt_no 
LEFT JOIN swr_cds s ON s.accnt_no = i.accnt_no 
WHERE i.accnt_no between 1 and 9999 
AND ((p.trans_dt between '1-jan-2000' AND '1-dec-2011' AND p.comp_cd=101) 
OR (s.trans_dt between '1-jan-2000' AND '1-dec-2011' AND s.comp_cd=101)) 

否則,我沒有看到任何錯得離譜與基於UNION,子查詢。雖然不是最佳的,但它可能最終成爲最佳途徑。

+0

感謝您的回覆。第一眼看起來很準確。 – prasun