1

我正在开发 c# 应用程序。我正在使用 OLEDB 连接。

我有以下两个表>>

支付

AdmissionNumber  | StudName |

       1            John
       2            Smith

付款详情

   AdmissionNumber  | RemainingFee |    Date         | Payment

        1                5000         10/10/2012         3000
        1                3000         10/11/2012         2000
        2                4000         15/11/2012         3000
        1                1000         10/12/2012         2000

在这个我想得到如下表格结果>>

 AdmissionNumber | Name | Date           |RemainingPayment|Payment|
       1           John    10/12/2012          1000         2000

在这种情况下,录取编号和日期已经通过文本框和日期时间选择器在表格中提供。

4

3 回答 3

2

在这种情况下,录取编号和日期已经通过文本框和日期时间选择器在表格中提供。

因此,您要搜索特定的录取编号和日期。如果是这样,那么试试这个:

SELECT 
  p.AdmissionNumber,  
  p.Name,   
  pd.Date,
  pd.RemaingFee AS RemainingPayment,
  pd.Payment
FROM Payment p
INNER JOIN PaymentDetails pd ON p.AdmissionNumber = pd.AdmissionNumber
WHERE p.AdmissionNumber = @AdmissionNumberParamFromTxtBox
  AND pd.Date           = @DateParamFromTheotherTextBox;
于 2012-11-06T06:44:45.033 回答
1

这将为您提供确切的结果。主记录与明细的最后一条记录之间的匹配。您应该在详细信息中有一个主键列。

Select  *
    From    Payment
    Left    Outer   Join
        PaymentDetail
    On  PaymentDetail.Id        =   (
        Select  Top 1
            A.Id
            From    PaymentDetail   As  A
            Where   A.AdmissionNumber   =   Payment.AdmissionNumber
            Order   By  A.Date  Desc
    )

干杯

于 2012-11-06T06:44:39.203 回答
0
SELECT 
  p.AdmissionNumber,  
  p.Name,
  MAX(pd.Date) AS Date,
  pd.RemaingFee AS RemainingPayment,
  pd.Payment
FROM Payment p
INNER JOIN PaymentDetails pd ON p.AdmissionNumber = pd.AdmissionNumber
GROUP BY p.AdmissionNumber,pd.Payment,p.Name,pd.RemaingFee
于 2012-11-06T06:49:26.113 回答