【发布时间】:2024-01-18 08:39:01
【问题描述】:
我的头撞在墙上,只见树木不见树林......
我有两张桌子; 1. ID 字段、开始日期和结束日期列。 2. 日期和工作日列。
我只需要能够使用第二个日历上的这个日期来计算每一行两者之间的天数。 Googl'ing 发现了很多没有日期表的示例,以及很多仅基于 1 个开始和结束日期的示例。
Table_1 - 包含每个 id 的条目
id start_date end_date
123 01/01/2013 03/01/2013
456 02/01/2013 08/01/2013
789 06/01/2013 07/01/2013
Table_2 - 包含每天的条目
e_day workday
01/01/2013 1
02/01/2013 0
03/01/2013 1
04/01/2013 1
05/01/2013 0
06/01/2013 1
07/01/2013 0
08/01/2013 0
结果 id start_date end_date days_between 123 2013 年 1 月 1 日 2013 年 3 月 1 日 2 456 2013 年 2 月 1 日 2013 年 8 月 1 日 3 789 06/01/2013 07/01/2013 1
我可以找出 1 个 id 的值;
SELECT COUNT(workday) FROM table_2
WHERE workday = 1 AND cal_day >= '01/01/2013'
AND cal_day <= '03/01/2013';
只是不确定如何将此逻辑放入 table_1。 IE(显然不正确)
SELECT
table_1.id,
table_1.start_date,
table_1.end_date,
(COUNT(table_2.workday) FROM table_2 WHERE table_2.workday = 1
AND table_2.e_day >= table_1.start_date
AND table_2.e_day <= table_2.end_date) AS days_between
FROM table_1
生成bodged示例表的代码;
CREATE TABLE #table_1(id INT, start_date SMALLDATETIME, end_date SMALLDATETIME);
CREATE TABLE #table_2(e_day SMALLDATETIME, workday BIT);
INSERT #table_1 VALUES (123,'01/01/2013','03/01/2013')
INSERT #table_1 VALUES (456,'02/01/2013','08/01/2013')
INSERT #table_1 VALUES (789,'06/01/2013','07/01/2013')
INSERT #table_2 VALUES ('01/01/2013',1)
INSERT #table_2 VALUES ('02/01/2013',0)
INSERT #table_2 VALUES ('03/01/2013',1)
INSERT #table_2 VALUES ('04/01/2013',1)
INSERT #table_2 VALUES ('05/01/2013',0)
INSERT #table_2 VALUES ('06/01/2013',1)
INSERT #table_2 VALUES ('07/01/2013',0)
INSERT #table_2 VALUES ('08/01/2013',0)
SELECT * FROM #table_1
SELECT * FROM #table_2
删除表格的代码;
删除表#table_1 删除表#table_2;
提前感谢大家的帮助:)
【问题讨论】:
标签: sql tsql date calendar sql-server-2000