C# 在这种情况下,datesavaailable表是否可用?Ben遇到的问题是,他不想在表中包含所有可能的日期,我相信…DatesAvailable是Ben表中的一个字段。。“我想最好是在SQL端完成,使用一个函数返回一个包含可用插槽的日期表。(不管有多少个插

C# 在这种情况下,datesavaailable表是否可用?Ben遇到的问题是,他不想在表中包含所有可能的日期,我相信…DatesAvailable是Ben表中的一个字段。。“我想最好是在SQL端完成,使用一个函数返回一个包含可用插槽的日期表。(不管有多少个插,c#,sql,C#,Sql,在这种情况下,datesavaailable表是否可用?Ben遇到的问题是,他不想在表中包含所有可能的日期,我相信…DatesAvailable是Ben表中的一个字段。。“我想最好是在SQL端完成,使用一个函数返回一个包含可用插槽的日期表。(不管有多少个插槽,只要至少有一个插槽可用。)”是的,所以他的问题是如何获得包含可用插槽的日期表,而不是如何过滤该表。对第一条评论不够清晰表示歉意,我指的是TableName。没错。我不想要一张有所有日期的桌子。我希望有一个“预订”表(即已占用的插槽),然后检


在这种情况下,
datesavaailable
表是否可用?Ben遇到的问题是,他不想在表中包含所有可能的日期,我相信…DatesAvailable是Ben表中的一个字段。。“我想最好是在SQL端完成,使用一个函数返回一个包含可用插槽的日期表。(不管有多少个插槽,只要至少有一个插槽可用。)”是的,所以他的问题是如何获得包含可用插槽的日期表,而不是如何过滤该表。对第一条评论不够清晰表示歉意,我指的是
TableName
。没错。我不想要一张有所有日期的桌子。我希望有一个“预订”表(即已占用的插槽),然后检查每个日期的技师数量(以及可用的可用插槽总数),然后减去当天已占用的插槽数量。(然后在循环中转到下一个日期,并再次执行相同的检查。)从预订中选择[AllDates],其中[DatesScheduled]介于开始日期和日期之间(m,3,开始日期)和(((每天笔记本电脑)*(技术人员可用))-已预订的插槽)>MaxSlots只需提供您的MaxSlots公式,您就可以得到您想要的。效率有多高?我使用的递归方法在ManagementStudio中运行得很快,我无法想象在选择三个月的并发日期时,您会注意到任何明显的好处。你对效率有什么基准吗?我问这个问题主要是因为我觉得代码相对来说是不可读的,所以效率问题对我来说非常重要,我想这样做(我应该注意,我相信可以,我只是想知道有多少)。@Chris这里有一篇文章非常详细地衡量了它:谢谢。现在阅读。。。或者不是,因为我不喜欢“注册只是为了阅读我们的页面”,所以我不打算这么做。我肯定他们不会失眠,但我还是要表明立场,该死的干杯@Chris-你知道我该怎么做吗
((laptops per day) * (technicians available)) - slots already booked
DECLARE @startDate DATE
DECLARE @endDate DATE

SET @startDate = GETDATE()
SET @endDate = DATEADD(m,3,@startDate)
;
WITH dates(Date) AS 
(
    SELECT @startdate as Date
    UNION ALL
    SELECT DATEADD(d,1,[Date])
    FROM dates 
    WHERE DATE < @enddate
)

SELECT Date
FROM dates 
EXCEPT
SELECT date
        FROM tl_sb_booking
        GROUP BY date
        HAVING COUNT(date) < 3
DECLARE @iToday As INT; SET @iToday = CAST(GetDate() As INT);
DECLARE @iDays As INT;  SET @iDays = 90;

WITH cte_0to9 As
(
    Select 0 As Num UNION ALL Select 1 UNION ALL Select 2 UNION ALL Select 3
    UNION ALL Select 4 UNION ALL Select 5 UNION ALL Select 6 UNION ALL Select 7
    UNION ALL Select 8  UNION ALL Select 9
)
, cte_0to99 As
(
    SELECT  (Tens.Num * 10) + Ones.Num As Num
    FROM        cte_0to9 As Ones
    CROSS JOIN  cte_0to9 As Tens
)
, cteDays As 
(
    SELECT  CAST(@iToday + Num As DATETIME) As PossibleDate
    FROM    cte_0to99
    WHERE   Num <= @iDays
)
, cteTechnicianUtilization As
(
    SELECT  t.Technician,
            d.PossibleDate,
            (Select COUNT(*) From Bookings b
             Where b.Technician = t.Technician
               And b.BookDate = d.PossibleDate) As SlotsUsed
    FROM    Technicians As t
    CROSS JOIN cteDays d
)
SELECT  PossibleDate, SUM(Util-3) As TotalAvailableSlots
FROM    cteTechnicianUtilization
WHERE   Util < 3
GROUP BY PossibleDate
HAVING  SUM(Util-3) > 0