2017-01-24 36 views
0

我試圖創建一個爲員工所做的所有最新付款的表。原始表格包含自從他們開始以來對員工進行的所有付款。我創建了一個派生表,只給我帶有最新日期的記錄。SQL Group通過派生表的問題

我仍然有一些重複的付款日期是相同的,在這種情況下,我想將這些付款添加在一起,以便它們出現在一行上。

以下是我的工作代碼;

SELECT  T1.EmployeeCode 
    , T2.Staff_Number 
    , T2.Firstname + ' ' + T2.Surname AS Name 
    , T1.PaymentDate 
    , T1.p1 
    , T1.p2 
    , T1.p3 
    FROM DB1.dbo.PARTIFPSNI AS T1 




--This section is supposed to return only the latest date 

INNER JOIN (
      SELECT EmployeeCode, MAX(PaymentDate) as MaxDate 
      FROM DB1.dbo.PARTIFPSNI 
      GROUP BY EmployeeCode    
     ) T1A ON T1.EmployeeCode = T1A.EmployeeCode and T1.PaymentDate = T1A.MaxDate 



LEFT JOIN DB2.dbo.Personnel_Records AS T2 ON (T1.EmployeeCode = T2.Staff_Number) 

這將返回下面;

enter image description here

我似乎有P1加在一起,P2 P3 &問題。我認爲這是因爲我試圖兩次使用GROUP BY函數。

+1

一些和/或混淆?在WHERE子句中添加一些額外的括號以使事情更清晰。 – jarlh

+0

編輯您的問題並提供樣本數據和期望的結果。 –

+0

順便提一下,這是一個僞外連接。外連接行中的列將爲空,因此對於外連接行,「T2.Staff_Number IS NOT NULL」永遠不會爲真,這會使您的連接變爲單純的內連接。 –

回答

2
SELECT T1.EmployeeCode , 
     T2.Staff_Number , 
     T2.Firstname + ' ' + T2.Surname AS Name , 
     T1.PaymentDate , 
     SUM(T1.p1) , 
     SUM(T1.p2) , 
     SUM(T1.p3) 
FROM DB1.dbo.PARTIFPSNI AS T1 
     INNER JOIN (SELECT EmployeeCode , 
          MAX(PaymentDate) AS MaxDate 
        FROM DB1.dbo.PARTIFPSNI 
        GROUP BY EmployeeCode 
        ) T1A ON T1.EmployeeCode = T1A.EmployeeCode 
          AND T1.PaymentDate = T1A.MaxDate 
     LEFT JOIN DB2.dbo.Personnel_Records AS T2 ON (T1.EmployeeCode = T2.Staff_Number) 
GROUP BY T1.EmployeeCode , 
     T2.Staff_Number , 
     T2.Firstname + ' ' + T2.Surname , 
     T1.PaymentDate 
+0

謝謝!我知道這很簡單。 – JBlack