2017-01-24 37 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