SQL Server存储过程问题。从数据库中获取多个结果

SQL Server存储过程问题。从数据库中获取多个结果,sql,sql-server,stored-procedures,group-by,Sql,Sql Server,Stored Procedures,Group By,下面是我的存储过程,用于获取员工列表及其在StartDate和EndDate之间的工作时间 ALTER procedure [dbo].[usp_get_employeehourlyreport] @startdate datetime, @enddate datetime as begin select * from ( select (select FullName from Registration where

下面是我的存储过程,用于获取员工列表及其在
StartDate
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
我得到的结果是:

   Fullname             HoursWorked
   Antonio Jake         0
   Antonio Jake         0.016666
因此,基本上它显示一行额外的小时数0。我的数据库中没有任何重复的全名

表结构包括:

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
注册

  UserId    int Unchecked
  FullName  varchar(50) Checked

试试这样的

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
ALTER procedure[dbo].[usp\U get\U employeehourlyreport]
@开始日期时间,
@结束日期日期时间
作为
开始
不计数;
选择R.FullName,ISNULL(总和(UT.HoursWorked),0)作为总工时
从注册R左连接用户时间UT
在R.UserId=UT.UserId Fullname上,ISNULL(SUM(HoursWorked),0)HoursWorked from UserTime
和UT.CheckIn>=@startdate

UT.CheckIn Usertime是表名。请看第一张桌子。我已经提过了。查询运行得很好,因为它给出了重复的结果。它不会编译。给出的错误为“Fullname附近的语法不正确”。您看不出我的代码和您编写的代码有什么不同吗?只要复制粘贴这个,它就会工作,使用和函数时不必担心空值。你的连接语法出了问题,只要复制粘贴我的解决方案,它就会工作。还有sql server中的google
SUM
JOINS
。我还将内部连接更改为left JOIN,它将返回所有用户,即使他们在日期范围内根本没有工作过。它将显示他们的工作时数为
0
@M.Ali。如果您将
where
条件移动到
on
子句中,它的行为将与您描述的一样。@GordonLinoff先生,恕我直言,如果开始日期和结束日期在
on
子句或
where
子句中,它会有任何区别吗。