SQL交叉连接和IIF(ISNULL)-未按预期工作

SQL交叉连接和IIF(ISNULL)-未按预期工作,sql,sql-server,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

我正在用一个报告文件、一个员工文件和一个报告分发文件编写一个查询。我想要一个员工姓名列表,每个人都有每个报告名,如果他们没有收到报告,则为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。我不明白为什么这个查询不起作用。如果可以的话,请帮忙。提前感谢

我认为您缺少报告中的连接条件:

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


注意:我将语法切换为标准SQL
IIF()
位于SQL Server中,以便与MS Access兼容(我无法理解为什么Microsoft没有将ANSI标准
case
置于MS Access中)。我还将
ISNULL()
替换为ANSI标准
ISNULL

我认为您缺少报告中的连接条件:

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


注意:我将语法切换为标准SQL
IIF()
位于SQL Server中,以便与MS Access兼容(我无法理解为什么Microsoft没有将ANSI标准
case
置于MS Access中)。我还将
ISNULL()
替换为ANSI标准
IS NULL

,但不查看数据,很难判断。您想要的是左连接而不是交叉连接。不查看数据,很难判断。您想要的是左连接而不是交叉连接。非常感谢!!!工作起来很有魅力:)也谢谢你更新我的代码!Gordon——这难道不意味着DL_向DL Reptdistrib报告了一个内部连接,基本上是US_usertable上的一个左连接吗?@Hogan。否。
交叉连接
生成OP需要的所有行(所有用户和报告的组合)。
left join
添加了关于当前存在的内容的信息。非常感谢!!!工作起来很有魅力:)也谢谢你更新我的代码!Gordon——这难道不意味着DL_向DL Reptdistrib报告了一个内部连接,基本上是US_usertable上的一个左连接吗?@Hogan。否。
交叉连接
生成OP需要的所有行(所有用户和报告的组合)。
左连接
添加有关当前存在内容的信息。
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.??;