我有三张桌子:
absen (date, time, id_user)
calendar (datefield)
employee (id_user, name, department, address)
Table absen example:
date time user_id
2015/01/02 08:00:00 00600320
2015/01/03 08:25:00 00600320
2015/01/05 08:10:00 00600320
.
.
2015/01/31 09:00:00 00600320
我正在寻找这样的结果:
date time user_id
2015/01/01 --:--:-- 00600320
2015/01/02 08:00:00 00600320
2015/01/03 08:25:00 00600320
2015/01/04 --:--:-- 00600320
2015/01/05 08:10:00 00600320
.
.
2015/01/31 09:00:00 00600320
答案 0 :(得分:0)
假设calendar
表使用date
数据类型保存该月的所有日期,并且absen
使用date
和time
,那么查询可能是你想要的:
select
c.datefield,
coalesce(cast(a.time as varchar(8)), '--:--:--') as time,
e.id_user
from calendar c
cross join employee e
left join absen a on c.datefield = a.date and e.id_user = a.id_user
where c.datefield between '2015/01/01' and '2015/01/31'
cross join
和calendar
之间的employee
生成集合的交叉产品,其中包含日期和员工集合以及left join
来自{{1}的时间对于缺少时间的日期,absen
用coalesce
替换缺失的值。
由于有关您的数据库设置的信息并不清楚,我猜了一下。