SQL交叉连接和IIF(ISNULL)-未按预期工作
我正在用一个报告文件、一个员工文件和一个报告分发文件编写一个查询。我想要一个员工姓名列表,每个人都有每个报告名,如果他们没有收到报告,则为0,如果他们收到报告,则为1SQL交叉连接和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
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.??;