具有复杂连接的SQL查询

时间:2012-11-06 06:40:20

标签: c# sql join oledb

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

我有以下两个表>>

付款

AdmissionNumber  | StudName |

       1            John
       2            Smith

paymentDetails

   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

在这种情况下,已经通过textbox和datetimepicker在表单中提供了入场号和日期。

3 个答案:

答案 0 :(得分:2)

  

在这种情况下,表格中已经提供了入场号码和日期   通过textbox和datetimepicker。

因此,您想要搜索特定的入学号码和日期。如果是这样,那么试试这个:

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;

答案 1 :(得分: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
    )

干杯

答案 2 :(得分: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