我正在 ASP .Net 上开发 Gridview。我在 SQL Server 中有一个表,其中包含名为“姓氏”和“日期”(DateTime)和持续时间的列。该表用于休假请求。如何构建 SQL 语句以查看每天将丢失多少人?关键是查询 SELECT [Date], COUNT(DISTINCT surname) GROUP BY [Date] 不会告诉我实际上 9 月 2 日将有 8 人失踪。例如,给定以下数据:

surname Date       Duration
------- ---------- ---------
Bertram 2011-09-01     3
Coulois 2011-09-01     5
LeBlanc 2011-09-01     6
Fosters 2011-09-01     3
Blanche 2011-09-01     2
Bertram 2011-09-02     6
Gillian 2011-09-02     4
Pikklar 2011-09-02     7
Thierry 2011-09-03     6
Selanne 2011-09-03     6

我想要以下结果:
Date  Count
----- -----
1 Sep     5
2 Sep     8
3 Sep     10

任何想法如何处理它并使用这些数据生成网格 View ?谢谢你的时间

最佳答案

以下应该为您提供从预订的第一天开始到预订的最后一天(不仅仅是开始日期)结束的所有假期的分割。它还应报告零预订范围内的日期(如果存在);

2011-09-01  5
2011-09-02  8
2011-09-03  10
2011-09-04  9
2011-09-05  7
2011-09-06  7
2011-09-07  5
2011-09-08  4
2011-09-09  3

该代码计算最后预订日期,然后计算动态日期范围内每一天的所有预订
DECLARE @MaxDate date
SELECT  @MaxDate = max(dateAdd(day, duration, date))
FROM holiday;

WITH HolidayDates (holidayDate)
as
(
    SELECT  MIN(date) holidayDate
    FROM    holiday
    UNION ALL
    SELECT  DateAdd(day, 1, holidayDate)
    FROM    holidayDates
    WHERE   holidayDate <@MaxDate
)

SELECT      cast(hd.holidayDate as date) holidayDate
            , count(h.surname) PeopleOnHoliday
FROM        HolidayDates hd
LEFT JOIN   holiday h on hd.holidayDate between h.date AND dateAdd(day, duration, date)
GROUP BY    hd.holidayDate
ORDER BY    hd.holidayDate

希望这可以帮助...

关于c# - sql语句帮助,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7263855/

10-09 08:48
查看更多