我有两张桌子。
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 :(得分: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
答案 1 :(得分: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
答案 2 :(得分: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;
答案 3 :(得分: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