请问这个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分别怎样写?????????????? 
  

解决方案 »

  1.   

    这个是在程序中的编法,你在转换一下,就可以在直接在数据库中操作了,先试试这个是否可行
    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);
      

  2.   

    select MASTER.*,DETIAL.LOGINTIME from  MASTER,DETIAL where MASTER.NAMEID =DETIAL.NAMEID
    //
    好好看看书吧
      

  3.   

    最后一个写掉了一点是这样的
      sSql := ' select * from MASTER b,' +#temp a
           +'where a.flag = 1 and a.NAMEID = b.NAMEID';
    SqlCommand(qryDetail,sSql,'',0);
      

  4.   

    UP,肯定能实现,我现在没时间帮你测,说下方案,从MASTER右链接DETIAL处理,加上你所说的条件即可,
      

  5.   

    select MASTER.*,DETIAL.LOGINTIME from  MASTER,DETIAL 
    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(),但你只要取
    出那个字段内的时间来就可以了
      

  6.   

    Hedonism(努力=幸福)的方法,做一个视图
      

  7.   

    太简单了select master.*,lonintime from detail 
    left jion master
    on detail.nameid=master.nameid 
    where logintime>.... and logintime<....
    时间范围你自己写吧,用substring截取
      

  8.   

    SELECT MASTER.Name,MASTER.PHONE,MASTER.NAMEID,DETIAL.LOGINTIME FROM MASTER INNER JOIN DETIAL ON MASTER.NameID=DETIAL.NameID WHERE MASTER.NameID In
    (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'))
      

  9.   

    convert(char(8),LOGINTIME,108 ) 这句的作用是什么 ,谢谢
      

  10.   

    SELECT DETIAL.NAMEID, MASTER.NAME AS NAME, MASTER.PHONE AS PHONE, 
          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')
    这个我测试过,可以选出满足要求的记录了,上次那个是因为括号的问题,所以没有选出来,现在就可以了
      

  11.   

    select MASTER.*,DETIAL.LOGINTIME from  MASTER,DETIAL where MASTER.NAMEID =DETIAL.NAMEID