有表tabel1(empno,flag) 和tabel2(empno,other,date)
我想根据flag 和date返回一个数据集.
要求:数据集合包括tabel1中符合flag=1的empno所有记录,如果tabel2没有匹配的记录,other返回null我的sql语句是这样的
SELECT  *
FROM Staff s left outer JOIN Attendance a ON s.EmpNo = a.EmpNO
Where   s.Active=1 and a.Date=@Date
ORDER BY s.EmpNo执行后,tabel1中符合flag=1的记录但tabel2没有符合date的记录,就不返回任何记录.
大家帮我看看错哪里了

解决方案 »

  1.   

    SELECT  *
    FROM Staff s left outer JOIN Attendance a ON s.EmpNo = a.EmpNO
    Where   s.Active=1 and a.Date=@Date
    ORDER BY s.EmpNo你写的根你说的怎么一点也不粘边啊
    你说要判断FLAG字段,怎么出来一个Active字段,还有,你怎么执行的这个语句啊,@date是一个变量,赋值怎么可以这样写.即使用的是变量的话,也应该是这样执行吧~
    declare @sql varchar(1000)
    declare @date datetime
    set @sql='SELECT  *
    FROM Staff s left outer JOIN Attendance a ON s.EmpNo = a.EmpNO
    Where   s.Active=1 and a.Date='''+@Date+'''
    ORDER BY s.EmpNo'
    exec(@sql)
      

  2.   

    SELECT  s.*, other=(select case when Date=@Date then other else null end from Attendance a where s.EmpNo = a.EmpNO) 
    FROM Staff s where  s.Active=1 
    ORDER BY s.EmpNo
    自己测试下.
      

  3.   

    不好意思.我把s.flag打成s.active了
      

  4.   

    3楼的说法和我的一样,我的sql语句是存储过程中的一段,所以不存在你说怎么执行的问题.你只是把我的语句换成可以在分析器执行而已.
    4楼的做法我觉得不好,如果staff中有10W个记录,那岂不是要扫描10W次attendance来匹配?
      

  5.   

    select a.*,b.* from (Select * from tabel1 where flag =1) a left join (Select * from tabel2 where Date =@Date ) b on a.empno = b.empno