home bbs files messages ]

Forums before death by AOL, social media and spammers... "We can't have nice things"

   comp.databases.ms-sqlserver      Notorious Rube Goldberg contraption      19,505 messages   

[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]

   Message 19,176 of 19,505   
   M.G. to M.G.   
   Re: left join not quite working   
   26 Feb 15 18:03:13   
   
   From: michael@gurfinkel.us   
      
   Solved - I should have check for the date within ON clause, and not in the   
   WHERE   
   correct version looks like this :   
      
   select ...   
   left join	@SCHEDULED S	on E.EMPL_ID=S.EMPL_ID   
        and S.WORK_DATE = '20150107';   
      
      
   On Thursday, February 26, 2015 at 3:51:12 PM UTC-8, M.G. wrote:   
   > I need to show list of employees along with their scheduled work hours for a   
   given date. If employee was not scheduled to work, then the hours should be   
   empty on his/her line.   
   >   
   > Here is my setup (SQL 2008)   
   > declare @EMPLOYEES	table (   
   > 	EMPL_ID		int		NOT NULL   
   > ,	EMPL_NAME	varchar(64)   
   > )   
   > insert into @EMPLOYEES(EMPL_ID,EMPL_NAME) values   
   > ( 100,	'JOHN'),   
   > ( 200,	'BOB'),   
   > ( 300,	'MARY');   
   >   
   >   
   > declare @SCHEDULED	table (   
   > 	EMPL_ID		int		NOT NULL   
   > ,	WORK_DATE	date	NOT NULL   
   > ,	WORK_HOURS	int		NOT NULL   
   > )   
   > insert into @SCHEDULED(EMPL_ID, WORK_DATE, WORK_HOURS) values   
   > ( 100,	'20150106',	8),   
   > ( 100,	'20150107',	8),   
   > ( 100,	'20150108',	8),   
   > ( 200,	'20150107',	6);   
   >   
   > So, I expect to get three records in my report regardless of the day   
   specified.   
   >   
   >   
   >   
   > This is my SQL statement:   
   >   
   > select E.EMPL_ID, E.EMPL_NAME, S.WORK_DATE, S.WORK_HOURS   
   > from	   
   > 		@EMPLOYEES E   
   > left join	@SCHEDULED S	on E.EMPL_ID=S.EMPL_ID   
   >   
   > where		S.WORK_DATE = '20150107' or S.EMPL_ID IS NULL;   
   >   
   > It results in :   
   >   
   > EMPL_ID	EMPL_NAME WORK_DATE WORK_HOURS   
   > ======= ======= ========== =======   
   > 100	JOHN	2015-01-07	8   
   > 200	BOB	2015-01-07	6   
   > 300	MARY	NULL	NULL   
   >   
   > Which is correct.   
   >   
   > If I use 20150206, my result is:   
   >   
   > 100	JOHN	2015-01-06	8   
   > 300	MARY	NULL	NULL   
   >   
   > So, I am missing record for BOB, as I would expect to se BOB with NULLS in   
   the report   
   >   
   > If I use date of 20150131 I expect to get three lines with all hours being   
   NULLS, but my result is only one record:   
   >   
   > 300	MARY	NULL	NULL   
   >   
   > Please help me with this situation, any ideas would be appreciated.   
      
   --- SoupGate-Win32 v1.05   
    * Origin: you cannot sedate... all the things you hate (1:229/2)   

[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]


(c) 1994,  bbs@darkrealms.ca