I have two tables:
Table A:
EmployeeID | DailyHour | Date |
---|---|---|
ID001 | 2 | 2021-02-01 |
ID001 | 4 | 2021-02-03 |
ID001 | 4 | 2021-02-04 |
ID001 | 4 | 2021-02-10 |
ID001 | 8 | 2021-02-15 |
ID002 | 8 | 2021-02-20 |
Table B:
EmployeeID | Week | StandardHours |
---|---|---|
ID001 | 2021-02-05 | 40 |
ID001 | 2021-02-12 | 40 |
ID001 | 2021-02-19 | 40 |
ID002 | 2021-02-12 | 40 |
How can I get the sum of DailyHour, StandardHours
per EmployeeID
(Date
within range of Week
)
Expected Output:
For EmployeeID
= ID001
and Date
Between Feb 1 2021
and Feb 12 2021
EmployeeID | DailyHours | StandardHours |
---|---|---|
ID001 | 14 | 80 |
Thank you in advance.
Advertisement
Answer
You’ll need to aggregate first, and then JOIN
the data, based on the Employee’s ID:
WITH Daily AS( SELECT EmployeeID, SUM(DailyHour) AS DailyHours FROM dbo.TableA WHERE [Date] >= '20200201' AND [Date] <= '20200212' GROUP BY EmployeeID), Standard AS( SELECT EmployeeID, SUM(StandardHours) AS StandardHours FROM dbo.TableB WHERE [Week] >= '20200201' AND [Week] <= '20200212' GROUP BY EmployeeID) SELECT D.EmployeeID, D.DailyHours, S.StandardHours FROM Daily D JOIN Standard S ON D.EmployeeID = S.EmployeeID;
If an Employee might not have Standard or Daily hours, you’ll need to use a LEFT JOIN
or FULL OUTER JOIN
, along with ISNULL
(in the SELECT
).