请问这个SQL语句应该怎样写??????????????????????????
有两个表分别是 MASTER,DETIAL表
MASTER表有 NAME,PHONE, NAMEID 等字段
DETIAL表有 NAMEID ,LOGINTIME(DATETIME类型), 等字段 现在要实现这样的功能,将某个月的LOGINTIME字段,凡是每日 上午8点30到11点30分, 下午14点30到晚上21点的记录同MASTER表的NAME,PHONE等字段合并一起显示,合并依据是NAMEID
例如: MASTER表 记录的如下
字段 NAMEID NAME PHONE
0001 小明 88688
0002 小红 77755
0003 小狗 44444
DETIAL表 记录的如下
字段 NAMEID LOGINTIME 0001 04-1-5 7:20:00
0003 04-1-5 8:40:00
0002 04-1-6 13:12:00
0001 04-1-12 15:02:00
0003 04-2-1 8:40:00
---------------
按照上面的要求对1月份进行查询, 得出下面的数据
NAME PHONE NAMEID LOGINTIME 小狗 44444 0003 04-1-5 8:40:00
(因为超过了上午8点30)
小明 88688 0001 04-1-12 15:02:00
(因为超过了下午14点30)
--------- 请问这个SQL语句在SQL2000 和ACCESS分别怎样写??????????????
有两个表分别是 MASTER,DETIAL表
MASTER表有 NAME,PHONE, NAMEID 等字段
DETIAL表有 NAMEID ,LOGINTIME(DATETIME类型), 等字段 现在要实现这样的功能,将某个月的LOGINTIME字段,凡是每日 上午8点30到11点30分, 下午14点30到晚上21点的记录同MASTER表的NAME,PHONE等字段合并一起显示,合并依据是NAMEID
例如: MASTER表 记录的如下
字段 NAMEID NAME PHONE
0001 小明 88688
0002 小红 77755
0003 小狗 44444
DETIAL表 记录的如下
字段 NAMEID LOGINTIME 0001 04-1-5 7:20:00
0003 04-1-5 8:40:00
0002 04-1-6 13:12:00
0001 04-1-12 15:02:00
0003 04-2-1 8:40:00
---------------
按照上面的要求对1月份进行查询, 得出下面的数据
NAME PHONE NAMEID LOGINTIME 小狗 44444 0003 04-1-5 8:40:00
(因为超过了上午8点30)
小明 88688 0001 04-1-12 15:02:00
(因为超过了下午14点30)
--------- 请问这个SQL语句在SQL2000 和ACCESS分别怎样写??????????????
var
temp : string;
begin
sSql := 'select *,null as flag into #temp from DETIAL'
where LOGINTIME>='04-01-01' and LOGINTIME <= '04-01-30';
SqlCommand(qryDetail,sSql,'',1);
for i= 1 to i >=30 then
begin
sSql := 'select * from'+ #temp
where (LOGINTIME>='2004'+'-'+'01'+'-'+'i'+''+'8:30:00' and LOGINTIME <='2004'+'-'+'01'+'-'+'i'+''+'11:30:00')
and (LOGINTIME>='2004'+'-'+'01'+'-'+'i'+''+'14:30:00' and LOGINTIME <='2004'+'-'+'01'+'-'+'i'+''+'21:00:00') ;
SqlCommand(qryFunc,sSql,'',0);
sCode := qryDetail.fieldByName('NAMEID').asstring;
sDate := qryDetail.fieldByName('LOGINTIME').asDateTime;
inc(i);
Sql:= 'update'+#temp+' set flag =1'
+'where NAMEID ='''+sCode +'''and'
+'LOGINTIME ='''+DateTimeToStr(sDate)+'''';
SqlCommand(qryFunc,sSql,'',1);
next;end;
sSql := ' select * from MASTER b,' +#temp a
+'where a.flag = 1 ';
SqlCommand(qryDetail,sSql,'',0);
//
好好看看书吧
sSql := ' select * from MASTER b,' +#temp a
+'where a.flag = 1 and a.NAMEID = b.NAMEID';
SqlCommand(qryDetail,sSql,'',0);
where MASTER.NAMEID =DETIAL.NAMEID And
Year(DETIAL.LOGINTIME)="你所要的年份" And
Month(DETIAL.LOGINTIME)="你所要的月份" And
(Time(DETIAL.LOGINTIME) bewteen "8:30" and "11:30"
or Time(DETIAL.LOGINTIME) bewteen "14:30" and "21:00")
不好意很久不有用SQL2000了,不记的是否有这个Time(),但你只要取
出那个字段内的时间来就可以了
left jion master
on detail.nameid=master.nameid
where logintime>.... and logintime<....
时间范围你自己写吧,用substring截取
(Select NameID From DETIAL Where (convert(char(8),LOGINTIME,108)>='08:30:00' and
convert(char(8),LOGINTIME,108)<='11:30:00') OR (convert(char(8),LOGINTIME,108)>='14:30:00' and convert(char(8),LOGINTIME,108)<='21:00:00'))
DETIAL.LOGINTIME AS LOGINTIME
FROM MASTER INNER JOIN
DETIAL ON MASTER.NAMEID = DETIAL.NAMEID
WHERE (CONVERT(char(8), DETIAL.LOGINTIME, 108) >= '08:30:00') AND (CONVERT(char(8),
DETIAL.LOGINTIME, 108) <= '11:30:00') OR
(CONVERT(char(8), DETIAL.LOGINTIME, 108) >= '14:30:00') AND (CONVERT(char(8),
DETIAL.LOGINTIME, 108) <= '21:00:00')
这个我测试过,可以选出满足要求的记录了,上次那个是因为括号的问题,所以没有选出来,现在就可以了