2017-01-24 6 views
0

従業員に対して行われた最新の支払いのすべてのテーブルを作成しようとしています。元のテーブルには、開始してから従業員に支払ったすべての支払いがあります。最新の日付のレコードのみを私に渡すために派生テーブルを作成しました。SQL Group派生テーブルの問題

お支払い日が同じ場合でもまだ重複していますが、この場合、これらの支払いを一緒に追加して1行に表示したいとします。

以下は私の作業コードです。

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関数を2回使用しようとしているので、これを考えています。

+1

いくつかのAND/OR混乱?物事をより明確にするために、WHERE句に余分なかっこを追加します。 – jarlh

+0

質問を編集し、サンプルデータと希望の結果を提供してください。 –

+0

途中で疑似外部結合です。外側に結合された行の列はnullになります。したがって、 'T2.Staff_Number IS NOT NULL'は外側に結合された行では決してtrueにならず、結合は単なる内部結合になります。 –

答えて

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