首页 > 解决方案 > SQL中的switch函数和Null的无效使用

问题描述

我有一个查询,我希望结果根据他们的“序号”返回个人的 DOB。它正确地返回了个人的姓名,但不是他们正确的出生日期。我正在使用 MAX 函数,因为我需要将所有这些数据放在一行中,如果我不使用它,如果有多个受抚养人与员工相关联,我会得到多行。

但是,如果有多个依赖项而不是对应于 D.SequentialNumber=1 的依赖项,它会拉最大 DOB,这不是我需要的。我在这里想念什么?

以下是我的查询的迷你示例:

SELECT EIN.EIN, E.First_Name, E.Last_Name, 
Max(IIf(D.SequentialNumber=1,D.DepFirstName)) AS Cov24_First_Name, 
Max(IIf(D.SequentialNumber=1,D.DepLastName)) AS Cov24_Last_Name, 
Max(IIf(D.SequentialNumber=1 AND nz(D.DepDOB) > 0, "")) AS Cov24_SSN,
 Max(IIf(D.SequentialNumber=1 and D.CoveredIndividualSSN >0, "", d.DepDOB)) AS Cov24_DOB

FROM (tblEmp AS E LEFT JOIN tblEIN AS EIN ON E.EIN = EIN.EIN) LEFT JOIN tblDep AS D ON E.Emp_SSN = D.ResponsibleIndividualSSN
GROUP BY EIN.EIN, E.First_Name, E.Middle_Name, E.Last_Name;

标签: sqlms-accessmax

解决方案


我不确定查询:

SELECT EIN.EIN, E.First_Name, E.Last_Name, 
Max(IIf(D.SequentialNumber=1,D.DepFirstName, "")) AS Cov24_First_Name, 
Max(IIf(D.SequentialNumber=1,D.DepLastName, "")) AS Cov24_Last_Name, 
Max(IIf(D.SequentialNumber=1 AND nz(D.DepDOB) > 0, "", 0)) AS Cov24_SSN,
 Max(IIf(D.SequentialNumber=1 and D.CoveredIndividualSSN >0, "", d.DepDOB, "")) AS Cov24_DOB

FROM (tblEmp AS E LEFT JOIN tblEIN AS EIN ON E.EIN = EIN.EIN) LEFT JOIN tblDep AS D ON E.Emp_SSN = D.ResponsibleIndividualSSN
GROUP BY EIN.EIN, E.First_Name, E.Middle_Name, E.Last_Name;

推荐阅读