我有以下表格。一个人拥有TimeRegister
每个员工(每行等于IN和asc
序列中的OUT):
Employee TimeRegister
15 2014-04-01 11:51:43.000
15 2014-04-01 14:03:52.000
15 2014-04-01 14:17:01.000
15 2014-04-01 16:01:12.000
15 2014-04-03 09:48:33.000
15 2014-04-03 12:13:43.000
另一张桌子有所有日期:
Date
2014-04-01 00:00:00.000
2014-04-02 00:00:00.000
2014-04-03 00:00:00.000
2014-04-04 00:00:00.000
正如您在第一张表中所注意到的那样,2014-04-02的员工15没有记录。但我希望这个日期带有NULL
时间寄存器,所以看起来像这样:
Employee TimeRegister
15 2014-04-01 11:51:43.000
15 2014-04-01 14:03:52.000
15 2014-04-01 14:17:01.000
15 2014-04-01 16:01:12.000
15 NULL
15 2014-04-03 09:48:33.000
15 2014-04-03 12:13:43.000
我不希望INSERT
进入表格本身,而是使用VIEW
来获取此值。
所有帮助将不胜感激。提前致谢!
答案 0 :(得分:3)
我使用递归cte来生成范围的所有日期,但如果你说你有另一个包含所有日期(或所有相关/工作日期)的表,请使用它而不是{{1} }。同样,我从cteDateGen
的同一个表中删除了独特的员工 - 再次,您可能有另一个员工表。获得所有日期和员工的列表后,即使表中没有这样的行,也可以使用TimeRegister
将左外连接到表中,以确保每个日期/员工组合至少有一行: / p>
TimeRegister
我假设与小提琴here
中的表结构相同答案 1 :(得分:0)
这不完美(它给员工的空值而不是日期,只有年/月/日的比较是粗略的!)
select Employee, coalesce(TimeRegister, Date)
from Date
left outer join EmpDate
on left(cast(Date as nvarchar), 10) = left(cast(TimeRegister as nvarchar), 10)
即。给出:
EMPLOYEE COLUMN_1
15 April, 01 2014 11:51:43+0000
15 April, 01 2014 14:03:52+0000
15 April, 01 2014 14:17:01+0000
15 April, 01 2014 16:01:12+0000
(null) April, 02 2014 00:00:00+0000
15 April, 03 2014 09:48:33+0000
15 April, 03 2014 12:13:43+0000
(null) April, 04 2014 00:00:00+0000
SQL小提琴链接:http://sqlfiddle.com/#!3/482b1/7/0
答案 2 :(得分:0)
数据库设计似乎有点破碎了你需要的东西。这将获得NULL日期,但也是NULL员工。
SELECT T.Employee, T.TimeRegister
FROM DateTable D
LEFT JOIN TimeRegisterTable T
ON convert(date,T.TimeRegister) = convert(date,D.Date)
答案 3 :(得分:0)
尝试此查询,假设您的第一个表名为a1,第二个表名为a2:
select a.Employee,b.TimeRegister from a1 a
inner join a2 b on a.TimeRegister=b.TimeRegister
union
select x.Employee,null
from a1 x
where x.Employee not in (select d.Employee from a1 d
inner join a2 e on d.TimeRegister=e.TimeRegister
where d.Employee=null)
输出:
15 2014-04-01 11:51:43.000
15 2014-04-01 14:03:52.000
15 2014-04-01 14:17:01.000
15 2014-04-01 16:01:12.000
15 2014-04-03 09:48:33.000
15 2014-04-03 12:13:43.000
15 NULL