Sql 在日期和计数变量之间选择
我制作了一个存储过程,需要它检查日期范围内的每个日期。日期从浏览器My form中传递,然后在存储过程中设置为变量 当它在日期范围之间进行检查时,我还需要它来计算其他事情,例如,我有一个@max_users常量,该常量为20,如果所选日期之间的日期内有20人,则将变量设置为false 这是迄今为止a尝试在日期范围之间进行选择的代码Sql 在日期和计数变量之间选择,sql,date,select,count,Sql,Date,Select,Count,我制作了一个存储过程,需要它检查日期范围内的每个日期。日期从浏览器My form中传递,然后在存储过程中设置为变量 当它在日期范围之间进行检查时,我还需要它来计算其他事情,例如,我有一个@max_users常量,该常量为20,如果所选日期之间的日期内有20人,则将变量设置为false 这是迄今为止a尝试在日期范围之间进行选择的代码 SELECT (SOME FORM OF COUNTER TO COUNT VARIABLES WOUDL GO HERE) FROM table
SELECT (SOME FORM OF COUNTER TO COUNT VARIABLES WOUDL GO HERE)
FROM table
WHERE @Startdate => @StartDate AND =< @EndDate
我是SQL新手,在这方面遇到了麻烦
CREATE PROCEDURE spBusinessRules (@Startdate date, @Enddate date, @EmployeeID int)
/*****
Name:spBusinessRules
Description: Checks the holiday agaisnt all the business rules ready for accepting or declining
*****/
AS
BEGIN
SELECT COUNT(*)
FROM Holidays
WHERE @Startdate >= @Startdate AND @Enddate <= @Enddate AND (SELECT jobrole FROM Employees WHERE ID = @EmployeeID) = JobRole
END
SELECT * FROM Employees
上面是我的最新尝试,我仍然从中遇到问题。最好的方法是在TSQL中声明一个获取参数日期的函数。然后,您可以在函数中进行计算,并将值返回到此语句以显示。最后,我成功地完成了计算,这就是工作结果
DECLARE @EmployeeID int
DECLARE @StartDate date
DECLARE @EndDate date
DECLARE @JobRoleID int
SET @JobRoleID = 2
SET @EmployeeID = 2010
SET @Startdate = '2013-03-13'
SET @EndDate = '2015-03-14'
/*Sets The max days off for the users jobrole*/
DECLARE @EmployeeJobroleMAX int
SET @EmployeeJobroleMAX = (SELECT maxusersOffPerDay
FROM JobRole
WHERE @JobRoleID = JobRole.ID)
DECLARE @JobRoleOff int
BEGIN
DECLARE @DateCount date
SET @DateCount = @Startdate
DECLARE @EndDateCheck date
SET @EndDateCheck = DATEADD(d, 1, @EndDate)
WHILE(@DateCount <> @EndDateCheck)
BEGIN
SET @JobRoleOff = (SELECT COUNT(*) JobRoleID
FROM Employees
RIGHT JOIN Holidays
ON Employees.ID = Holidays.EmployeeID
WHERE @EmployeeID = Employees.ID
AND Holidays.StartDate >= @StartDate
AND Holidays.EndDate <= @EndDate)
SET @DateCount = DATEADD(d, 1, @DateCount)
END
IF(@JobRoleOff >= 1)
BEGIN
SELECT @JobRoleOff AS Failed
END
END
您基本上是在考虑循环,而这不是SQL正常工作的一般方式。在SQL中,我们尝试编写一个处理整个数据集的查询。不幸的是,你的问题太含糊了,我无法提出真正的问题。如果您可以添加一些示例数据,然后针对@StartDate和@EndDate的某些值,即预期结果,我们可以尝试编写一个查询来计算整个结果,而不是通过依次遍历每个日期。嗯,其中@Startdate>=@Startdate和@Enddate i虽然count更合适,因为我试图计算其中的一定数量的值,因为如果它的计数超过10,那么它会变为false一点,这是否仍然适用于existsNo,我只是仓促行事,因为当你真正想知道是否有行存在时,使用COUNT是初学者常见的错误。正如我所说,如果您可以添加一些示例数据和预期结果,我可能会提供帮助。目前,我们所得到的只是你的尝试,虽然我可以发现一些明显的问题,但我仍然不知道你到底在努力实现什么。基本上,我有一个假期预订系统,这个过程检查规则,当它通过时,所有的规则都会评估一个变量为true来预订假期。开始日期和结束日期是往返suer想要休假的日期,因此需要检查是否有10多人在两次休假之间休假,我认为无论如何,它还使用传递的员工id,以便可以找到JobRolets说现在有管理员。然后,如果有10个管理员关闭评估为false,不让他们预订:我有一个很大的规则列表,但如果我能理解这一个,我可能会完成重新汇总,他试图编写过程,所以这基本上告诉他什么。嗯,如果我正确缩进了这个,你就不会在循环时检查所有的天。有人能检查一下我的工作吗?无论如何,这可能不是最好的选择-我们能得到样本数据和期望的结果吗?你是对的。我现在意识到我的测试不恰当,这不是完整的答案:。此jsut检查开始和结束日期。它不会在开始日期和结束日期之间进行检查