所以我的头靠在墙上,看不到木头的树木......
我有两张桌子; 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
表_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 01/01/2013 03/01/2013 2 456 02/01/2013 08/01/2013 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
用于生成已填充示例表的代码;
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
删除表格的代码;
DROP TABLE#table_1 DROP TABLE#table_2;
感谢所有人提前帮助:)
答案 0 :(得分:0)
试试这个:
select a.id,a.start_date,a.end_date,sum(cast(workday as tinyint)) as NumWorkDays,
count(*) as Total_days
from idTable a
join workdaytable b on b.eday between a.start_date and a.end_Date
group by a.id,a.start_date,a.end_date
想象正在发生的事情
select a.id,a.start_date,a.end_date
where id=123
id start_date end_date
123 1/1/2013 3/1/2013
为id = 123
返回一行现在,当我们进行连接时,我们添加e_day和workday标志列AND我们在第二个表中为每个e_day添加一行
id start_date end_date e_day work_day
123 1/1/2013 3/1/2013 1/1/2013 0
123 1/1/2013 3/1/2013 1/2/2013 1
123 1/1/2013 3/1/2013 1/3/2013 1
etc.
现在我们在第二张表格中有一个大的“表格”,每列有5列和一行,介于2013年1月1日到2013年3月1日之间。 Sum操作只是添加我们通过连接创建的“表”中的所有work_day标志。如果在没有JOIN的情况下运行查询(并删除总和和计数),您可以看到创建的“表格”...
希望这有点帮助...