2012-11-06 101 views
1

我正在開發c#應用程序。 我正在使用OLEDB連接。使用複雜連接的sql查詢

我有以下兩個表>>

支付

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 

在這個ca se入場號碼和日期已經通過textbox和datetimepicker在表格中提供。

回答

2

在這種情況下接納號碼和日期在經由文本框和的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; 
+0

'+ 1'你:d。 –

+0

它給了我錯誤,沒有給多個必需參數的值 – Freelancer

+0

@freelancer - 你必須傳遞兩個參數給我發佈的查詢。看起來你只能傳遞一個參數。再次檢查您的代碼。 –

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 
    ) 

乾杯

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