Question

Here is my stored procedure to get a list of employees and their hours worked between StartDate and EndDate.

ALTER procedure [dbo].[usp_get_employeehourlyreport]
  @startdate  datetime,
  @enddate datetime
as 
begin
   select * 
   from (
      select 
         (select FullName from Registration 
          where Registration.UserId = UserTime.UserId) Fullname, 
         ISNULL(SUM(HoursWorked), 0) HoursWorked 
      from UserTime 
      where CheckIn between @startdate and @enddate
      group by UserId, CheckIn) tbl
end

The result I am getting is :

   Fullname             HoursWorked
   Antonio Jake         0
   Antonio Jake         0.016666

So basically it is displaying one row extra with hours 0. I Do not have any duplicate FullName in my database.

Table structures are:

USERTIME:

  UserTimeId    int             Unchecked
  UserId        int             Checked
  CheckIn       datetime        Checked
  LoginStatus   nvarchar(50)    Checked
  Day           varchar(50)     Checked
  HoursWorked   float           Checked
  Date          nvarchar(50)    Checked

REGISTRATION:

  UserId    int Unchecked
  FullName  varchar(50) Checked
Was it helpful?

Solution

Try something like this....

ALTER procedure [dbo].[usp_get_employeehourlyreport]
@startdate  datetime,
@enddate datetime
AS
BEGIN
 SET NOCOUNT ON;

    SELECT R.FullName, ISNULL(SUM(UT.HoursWorked),0) AS Total_Hours 
    FROM Registration R LEFT JOIN USERTIME UT
    ON   R.UserId = UT.UserId                                                                                                                    Fullname ,ISNULL(SUM(HoursWorked),0) HoursWorked from UserTime 
    AND   UT.CheckIn >= @startdate 
    AND   UT.CheckIn <= @enddate
    GROUP BY R.FullName
END
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top