SQL Cross Join和IIF(ISNULL) - 未按预期工作

时间:2016-11-22 16:56:29

标签: sql sql-server

我正在编写一个包含报告文件,员工文件和报告分发文件的查询。我想要一个员工姓名列表,每个名称都包含每个报告名称,如果他们没有得到报告则为0,如果他们收到报告,则为1。

 select distinct ut.user_name
      , ut.emailaddress
      , r.name
      , iif(ISNULL(rd.employeeid,0)=0, 0,1) AS currentreport
 from   US_usertable ut 
 cross join DL_reports r
 left outer join DL_Reptdistrib rd 
   on ut.employeeID = rd.employeeid

对于每个用户,我会得到一套完整的报告 - 因此交叉加入有效 - 但要么所有报告都获得1,要么所有报告都得0。我不明白为什么这个查询不起作用。如果可以,请帮助。在此先感谢!!!

1 个答案:

答案 0 :(得分:4)

我认为您错过了报告的加入条件:

select ut.user_name, ut.emailaddress, r.name,
       (case when rd.employeeid is null then 0 else 1 end) as currentreport
from US_usertable ut cross join
     DL_reports r left outer join
     DL_Reptdistrib rd
     on ut.employeeID = rd.employeeid and r.?? = rd.??;

??用于标识报告的字段。我猜可能是reportID

注意:我将语法切换为标准SQL。 IIF()在SQL Server中与MS Access兼容(为什么Microsoft没有在MS Access中放置ANSI标准case超出我的意思)。我还将ISNULL()替换为ANSI标准IS NULL