--那两个表都有id关联就行了 select a.* ,b.zt,b.rq,b.sj,b.xq from A表 a left join B表 b on (select count(*) from A表 where id<=a.id) =(select count(*) from B表 where id<=b.id)
--错了,应该用 full join select a.* ,b.zt,b.rq,b.sj,b.xq from A表 a full join B表 b on (select count(*) from A表 where id<=a.id) =(select count(*) from B表 where id<=b.id)
select count(*) from A表 where id<=a.id 你这个Where 后的ID指的是A表的吗
A表
id ssj esj xq
1 17:00:00 17:40:00 1
2 7:30:00 8:00:00 1
3 11:30:00 12:00:00 1
4 12:30:00 13:00:00 1
B表
zt rq sj xq
旷工 2004-11-01 8:01:11 1
正常 2004-11-01 12:57:14 1
旷工 2004-11-01 16:09:00 1
旷工 2004-11-01 19:52:45 1
就是这两个表通过XQ连想得到上述记录,不智能否实现
A表
id ssj esj xq
1 17:00:00 17:40:00 1
2 7:30:00 8:00:00 1
3 11:30:00 12:00:00 1
4 12:30:00 13:00:00 1
B表
zt rq sj xq
旷工 2004-11-01 8:01:11 1
正常 2004-11-01 12:57:14 1
旷工 2004-11-01 16:09:00 1
想得到
id ssj esj zt rq sj
1 17:00:00 17:40:00 旷工 2004-11-01 8:01:11
6 7:30:00 8:00:00 正常 2004-11-01 12:57:14
11 11:30:00 12:00:00 旷工 2004-11-01 16:09:00
16 12:30:00 13:00:00 NULL NULL NULL
应该说A,B表的记录是不固定的如果A表多B表就用NULL显示,如果B表多,A表就用NULL来显示,不知能否实现,不行的话能给个思路也行的
如果A表有5条记录怎么显示? B表的有四条记录
那么,B表的zt,rq,sj为NULL,A表正常显示如果A表只有3条记录呢? B表的有四条记录
A表的ssj,esj为NULL,B表正常显示
如上我回答的
应该说A,B表的记录是不固定的如果A表多B表就用NULL显示,如果B表多,A表就用NULL来显示,
select a.*
,b.zt,b.rq,b.sj,b.xq
from A表 a left join B表 b
on (select count(*) from A表 where id<=a.id)
=(select count(*) from B表 where id<=b.id)
select a.*
,b.zt,b.rq,b.sj,b.xq
from A表 a full join B表 b
on (select count(*) from A表 where id<=a.id)
=(select count(*) from B表 where id<=b.id)
你这个Where 后的ID指的是A表的吗
ssj esj xq
7:30:00 8:00:00 星期二
11:30:00 12:00:00 星期二
12:30:00 13:00:00 星期二
17:00:00 17:40:00 星期二
22:00:00 22:30:00 星期日
7:30:00 8:00:00 星期日
7:30:00 8:00:00 星期三
11:30:00 12:00:00 星期三
12:30:00 13:00:00 星期三
17:00:00 17:40:00 星期三
17:00:00 17:40:00 星期四
12:30:00 13:00:00 星期四
11:30:00 12:00:00 星期四
7:30:00 8:00:00 星期四
7:30:00 8:00:00 星期五
17:00:00 17:30:00 星期五
12:30:00 13:00:00 星期一
11:30:00 12:00:00 星期一
7:30:00 8:00:00 星期一
17:00:00 17:40:00 星期一
B表是员工刷卡的日志表
rq sj zt xq
2004-10-04 7:55:41 正常 星期一
2004-10-04 11:33:28 正常 星期一
2004-10-04 12:55:11 正常 星期一
2004-10-04 17:59:11 旷工 星期一
2004-10-05 7:46:18 正常 星期二
2004-10-05 11:40:15 正常 星期二
2004-10-05 12:27:15 旷工 星期二
2004-10-05 18:39:49 旷工 星期二
2004-10-06 20:24:51 旷工 星期三
2004-10-07 7:44:07 正常 星期四
2004-10-07 11:44:33 正常 星期四
2004-10-07 12:33:13 正常 星期四
2004-10-07 17:57:27 旷工 星期四
2004-10-08 7:58:45 正常 星期五
2004-10-08 17:15:40 正常 星期五
2004-10-09 8:03:23 旷工 星期六
2004-10-09 12:55:41 正常 星期六
2004-10-09 18:19:41 旷工 星期六
2004-10-11 7:55:06 正常 星期一
2004-10-12 7:58:09 正常 星期二
2004-10-12 11:35:51 正常 星期二
2004-10-12 12:40:20 正常 星期二
2004-10-12 19:13:13 旷工 星期二
2004-10-13 7:50:33 正常 星期三
2004-10-13 11:38:32 正常 星期三
2004-10-13 12:37:24 正常 星期三
2004-10-13 17:03:03 正常 星期三
2004-10-14 7:51:01 正常 星期四
2004-10-14 11:57:24 正常 星期四
2004-10-14 12:32:41 正常 星期四
2004-10-14 17:28:19 正常 星期四
2004-10-15 7:55:04 正常 星期五
2004-10-16 7:51:39 正常 星期六
2004-10-16 11:40:00 正常 星期六
2004-10-16 12:05:34 旷工 星期六
2004-10-16 17:42:41 旷工 星期六
日志表我只考了一部份,这样显示的时候我想必须按星期联合,把星期相同的正常刷卡时间段加上,
id ssj esj zt rq sj xq//我刚才忘掉了
1 17:00:00 17:40:00 旷工 2004-11-01 8:01:11 星期一
6 7:30:00 8:00:00 正常 2004-11-02 12:57:14 星期二
等等吧
如果在同一天正常分配了四个时间段,而只刷了三次,也就是说只有三次的记录,那么就显示四条记录,最后一条记录的日志(B表)为NULL,而分配的四个时间段正常显示,如果刷了五次卡,就显示五条记录,最后一条记录的分配时间段(A表)为NULL,
不知道明白了吗
不知道用ROLLUP能不能实现的
2004-10-11 7:55:06 正常 星期一
查询后想得到
12:30:00 13:00:00 2004-10-11 7:55:06 正常 星期一
11:30:00 12:00:00 NULL NULL NULL NULL
7:30:00 8:00:00 NULL NULL NULL NULL
17:00:00 17:40:00 NULL NULL NULL NULL
这样就可以的