2012-10-21 21 views
0

我有兩個表。加入不能在描述的條件下工作

Table1->付款

AdmissionNum(PK) | StudName | Fees | 

     1    sagar  5000 
     2    nilesh  6000 
     3    amar  4000 

Table2-> paymentDetails

AdmissionNum(FK) | RemainingFees | Date  | Payment 
     1    4000   1/1/2012   1000 
     2    5000   2/5/2012   1000 
     1    3500   2/10/2012   1500 
     1    2500   2/15/2012   1000 
     2    2500   2/20/2012   2500 
     3    0    3/25/2012   4000 

我已經嘗試了不同的查詢,但無法進行支付表和paymentDetails表之間的聯合。 我正在製作C#windows應用程序。當特定學生付費時,他的記錄存儲在paymentDetails表中。 我想只提取未付費用的詳細信息,即剩餘費用大於0但paymentDetais表中的最後詳細信息即學生。

我預計resut表是 -

AdmissionNum | StudName | Fees | RemainingFees 

     1   sagar  5000 2500 
     2   nilesh  6000 2500 
+0

其中RDBMS SQL SERVER? –

+0

oledb連接 – Freelancer

回答

2

試試這個:

with cte as (select P.AdmissionNum , P.StudName, P.Fees , D.RemainingFees,row_number() 
over (partition by P.AdmissionNum order by [DATE] desc) as rn 
from Payment P 
join PaymentDetails D 
on P.AdmissionNum=D.AdmissionNum 
where RemainingFees>0) 
select AdmissionNum ,StudName, Fees , RemainingFees 
from cte 
where rn=1 


SQL fiddle demo

0

如下我會做到這一點。

SELECT 
     P.AdmissionNum, 
     P.StudName, 
     P.Fees 
     P.Fees - PD.Payment 'RemainingFees' 
FROM 
    Payment P 
    JOIN (SELECT 
       AdmissionNum, 
       SUM(Payment) 'Payment' 
      FROM 
       PaymentDetails 
      GROUP BY AdmissionNum 
    ) AS PD 
    ON P.AdmissionNum = PD.AdmissionNum 
WHERE 
    P.Fees - PD.Payment > 0 
+0

其餘費用已經計算並保存在表格中。但是通過此查詢,我能夠獲得剩餘費用大於0的唯一記錄嗎? – Freelancer

+0

您的詳細信息表中的「RemainingFees」沒有多大用處,因爲提取它需要您首先按ID標識最新的記錄,然後再次與詳細信息表一起加入以獲取相應的剩餘費用。關於remainingFees> 0的記錄,我只是更新了相同的查詢。 – Vikdor

0

嘗試以下:

SELECT a.AdmissionNum, a.StudName , a.Fees, b.remFees as RemainingFees 
    FROM Payment a, 
     (SELECT AdmissionNum, min(RemainingFees) as remFees 
      FROM PaymentDetails b GROUP BY AdmissionNum) b 
    WHERE a.AdmissionNum = b.AdmissionNum 
     and b.remFees >0; 
+1

它不是得到最小(RemainingFees),但最大(日期) – Habibillah

+0

@Habibillah:我確實看到你回答。它是一種不同的方法。您假設「最終剩餘費用」是截至最後日期的餘額。我只是獲得最低餘額,因爲剩餘費用只能向下移動。 –

+0

這個問題告訴「剩餘費用大於0但是paymentDetais表中的最後細節」。最後的細節T認爲等於Max(日期) – Habibillah

0

嘗試查詢波紋管:

Select a.AdmissionNum, a.StudName, a.Fees, b.RemainingFees 
from Payment a 
inner join paymentDetails b on a.AdmissionNum = b.AdmissionNum 
inner join (
    select AdmissionNum, max(date) as date 
    from paymentDetails 
    group by AdmissionNum 
) c on a.AdmissionNum = c.AdmissionNum 
where b.RemainingFees > 0 and b.Date = c.Date