Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在日期和计数变量之间选择_Sql_Date_Select_Count - Fatal编程技术网

Sql 在日期和计数变量之间选择

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

我制作了一个存储过程,需要它检查日期范围内的每个日期。日期从浏览器My form中传递,然后在存储过程中设置为变量

当它在日期范围之间进行检查时,我还需要它来计算其他事情,例如,我有一个@max_users常量,该常量为20,如果所选日期之间的日期内有20人,则将变量设置为false

这是迄今为止a尝试在日期范围之间进行选择的代码

    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检查开始和结束日期。它不会在开始日期和结束日期之间进行检查