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中的googleSUM
和JOINS
。我还将内部连接更改为left JOIN,它将返回所有用户,即使他们在日期范围内根本没有工作过。它将显示他们的工作时数为0
@M.Ali。如果您将where
条件移动到on
子句中,它的行为将与您描述的一样。@GordonLinoff先生,恕我直言,如果开始日期和结束日期在on
子句或where
子句中,它会有任何区别吗。