0

私は2つのテーブルを持っています。

表1->支払い

AdmissionNum(PK)  |  StudName |   Fees |

       1               sagar      5000 
       2               nilesh     6000
       3               amar       4000  

表2->支払い詳細

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アプリを作っています。特定の学生が料金を支払っている場合、その学生の記録は paymentDetail テーブルに保存されます。未払いの料金の詳細のみを抽出したい。つまり、残りの料金が 0 より大きいが、paymentDetais テーブルの最後の詳細、つまり .

私の期待される結果テーブルは-

AdmissionNum  |  StudName |   Fees | RemainingFees

       1           sagar      5000    2500
       2           nilesh     6000    2500
4

4 に答える 4

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 フィドルのデモ

于 2012-10-21T04:40:36.107 に答える
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
于 2012-10-21T04:25:12.290 に答える
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;
于 2012-10-21T04:28:23.457 に答える
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
于 2012-10-21T04:33:32.647 に答える