Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.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 Server在开始日期和结束日期之间_Sql_Sql Server - Fatal编程技术网

SQL Server在开始日期和结束日期之间

SQL Server在开始日期和结束日期之间,sql,sql-server,Sql,Sql Server,我正在创建一个内部假日预订系统,我需要将业务逻辑规则落实到位,但我需要检查在开始日期和结束日期之间有多少人被预订,因为例如,2名学徒可能只在1天内被预订,但我无法抓住这两天之间的日期 任何帮助都将不胜感激 下面是作业角色表 您还没有发布RDBMS,表的名称,或者作业角色表到底应该做什么。。。不过我还是要试试看。我使用递归CTE来生成日期列表,但是使用日期表会更好,我甚至不知道您的RDBMS是否支持这一点。我还发布了下面一个表变量的语法,该表变量填充模拟示例的数据 当然,最终输出需要进行定制,以便

我正在创建一个内部假日预订系统,我需要将业务逻辑规则落实到位,但我需要检查在开始日期和结束日期之间有多少人被预订,因为例如,2名学徒可能只在1天内被预订,但我无法抓住这两天之间的日期

任何帮助都将不胜感激

下面是作业角色表


您还没有发布RDBMS,表的名称,或者作业角色表到底应该做什么。。。不过我还是要试试看。我使用递归CTE来生成日期列表,但是使用日期表会更好,我甚至不知道您的RDBMS是否支持这一点。我还发布了下面一个表变量的语法,该表变量填充模拟示例的数据

当然,最终输出需要进行定制,以便执行您需要执行的任何操作。但是,这确实会向您显示多个员工休假的每个日期的列表。在第二个JOIN或WHERE子句中添加额外的条件,以便在必要时对JobRole等其他内容进行筛选

-- Code originally from http://smehrozalam.wordpress.com/2009/06/09/t-sql-using-common-table-expressions-cte-to-generate-sequences/

-- Define start and end limits
DECLARE @todate DATETIME, @fromdate DATETIME
SELECT @fromdate='2014-01-01', @todate=GETDATE()-1

DECLARE @TimeOff TABLE (StartDate DATETIME, EndDate DATETIME, EmployeeID INT)

INSERT INTO @TimeOff (StartDate, EndDate, EmployeeID)
SELECT '1/1/2014', '1/7/2014', 7 UNION 
SELECT '2/1/2014', '2/7/2014', 7 UNION 
SELECT '3/3/2014', '3/9/2014', 7 UNION 
SELECT '2/5/2014', '2/6/2014', 8 

;WITH DateSequence( Date ) AS -- this will list all dates.  Use this if you don't have a date table
  (
    SELECT @fromdate as Date
    UNION ALL 
    SELECT DATEADD(DAY, 1, Date)
    FROM DateSequence
    WHERE Date < @todate
  )

--select result
SELECT DateSequence.Date, TimeOffA.StartDate, TimeOffB.EndDate, TimeOffA.EmployeeID
FROM 
    DateSequence -- a full list of all possible dates
     INNER JOIN 
    @TimeOff TimeOffA ON -- all dates when an employee is on vacation -- replace this with your actual table's name
        DateSequence.Date BETWEEN TimeOffA.StartDate AND TimeOffA.EndDate
     INNER JOIN 
    @TimeOff TimeOffB ON -- all dates when an employee who is NOT employee A is on vacation -- replace this with your actual table's name
        DateSequence.Date BETWEEN TimeOffB.StartDate AND TimeOffB.EndDate AND
        TimeOffA.EmployeeID <> TimeOffB.EmployeeID
option (MaxRecursion 2000)

您正在使用什么RDBMS Oracle、SQL Server 2008R2、SQLLite等?