我正在 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/