Hi SQLTeam
I have a LOT of experience with T-SQL, but here I have met a issue that I SIMPLY can't understand
On SQL2014 using SSMS 2016, I have 2 views (linked from another SQL Server), one containing the users work hours per day then other the users registered hours per day. Users might not have registred hours on each day where they have work hours. I therefore join the 2 tables using a LEFT OUTER JOIN.
When I add a date to the where clause then SOME (4th of July is OK 5th is not - not specific to these 2 dates though) of the data that exists on the right table disappear. If I test it by moving the data from the 2 views to TEMP tables then I get the expected result.
Here is the different sql statements
Driving me MAD, anyone with a good idea ?
THANK YOU
-- INNER JOIN RETURNS CORRECT RESULT
select TimeSheetHours.*
, Hours_Worked.RegisteredHours
, Hours_Worked.OverTimeAdjustment
, Hours_Worked.Hours_Worked
from
vw_TimeSheetHours TimeSheetHours
INNER JOIN
vw_HoursWorked Hours_Worked
ON TimeSheetHours.EMPLOYEENUMBER = Hours_Worked.EMPLOYEENUMBER AND TimeSheetHours.TheDate = Hours_Worked.ENTRYDATE
where TimeSheetHours.EMPLOYEENUMBER = '11252'
and TimeSheetHours.TheDate between '4-jul-2016' and '5-jul-2016'
order by TimeSheetHours.TheDate
-- LEFT OUTER JOIN RETURNS THE CORRECT RESULT WHEN NO DATE IN WHERE WHERE CLAUSE
select TimeSheetHours.*
, Hours_Worked.RegisteredHours
, Hours_Worked.OverTimeAdjustment
, Hours_Worked.Hours_Worked
from
vw_TimeSheetHours TimeSheetHours
LEFT OUTER JOIN
vw_HoursWorked Hours_Worked
ON TimeSheetHours.EMPLOYEENUMBER = Hours_Worked.EMPLOYEENUMBER AND TimeSheetHours.TheDate = Hours_Worked.ENTRYDATE
where TimeSheetHours.EMPLOYEENUMBER = '11252'
order by TimeSheetHours.TheDate
-- LEFT OUTER JOIN LOOSES THE LEFT SIDE WHEN A DATE IS ADDED TO THE WHERE CLAUSE
select TimeSheetHours.*
, Hours_Worked.RegisteredHours
, Hours_Worked.OverTimeAdjustment
, Hours_Worked.Hours_Worked
from
vw_TimeSheetHours TimeSheetHours
LEFT OUTER JOIN
vw_HoursWorked Hours_Worked
ON TimeSheetHours.EMPLOYEENUMBER = Hours_Worked.EMPLOYEENUMBER AND TimeSheetHours.TheDate = Hours_Worked.ENTRYDATE
where TimeSheetHours.EMPLOYEENUMBER = '11252'
and TimeSheetHours.TheDAte between '4-jul-2016' and '5-jul-2016'
order by TimeSheetHours.TheDate
--select * into #vw_TimeSheetHours from vw_TimeSheetHours where EMPLOYEENUMBER = '11252'
--select * into #vw_HoursWorked from vw_HoursWorked where EMPLOYEENUMBER = '11252'
-- SAME LOGIC AS BEFORE, BUT NOW THE RECORDS FROM THE 2 VIEWS ARE PUT INTO TEMP TABLES, NOW THE EXPECTED RESULT IS ACHIEVED
select TimeSheetHours.*
, Hours_Worked.RegisteredHours
, Hours_Worked.OverTimeAdjustment
, Hours_Worked.Hours_Worked
from
#vw_TimeSheetHours TimeSheetHours
LEFT OUTER JOIN
#vw_HoursWorked Hours_Worked
ON TimeSheetHours.EMPLOYEENUMBER = Hours_Worked.EMPLOYEENUMBER AND TimeSheetHours.TheDate = Hours_Worked.ENTRYDATE
where TimeSheetHours.EMPLOYEENUMBER = '11252'
and TimeSheetHours.TheDAte between '4-jul-2016' and '5-jul-2016'
order by TimeSheetHours.TheDate