我有一个查询,我希望结果根据其“顺序号”返回个人的DOB。它会正确返回个人的姓名,但不会返回正确的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;
答案 0 :(得分:0)
我认为情况是倒退的,您可能想要:
Max(IIf(D.SequentialNumber=1 and D.CoveredIndividualSSN >0, d.DepDOB, NULL)) AS Cov24_DOB
答案 1 :(得分:0)
我不确定该查询:
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;
答案 2 :(得分:0)
不确定查询是否应该只限于SequentialNumber = 1的雇员,或者查询是否应处理所有依赖项。为了获得更好的答案,请澄清查询的目的,因为我们也许可以更好地了解下游步骤。
SELECT DISTINCT
EIN.EIN
,E.First_Name
,E.Last_Name
,D.DepFirstName AS Cov24_First_Name
,D.DepLastName AS Cov24_Last_Name
,D.ResponsibleIndividualSSN AS Cov24_SSN
,CASE
WHEN NULLIF(D.CoveredIndividualSSN,'') IS NULL THEN D.DepDOB
END AS Cov24_DOB
FROM tblEmp AS E
LEFT OUTER JOIN tblEIN AS EIN ON E.EIN = EIN.EIN
LEFT OUTER JOIN tblDep AS D ON E.Emp_SSN = D.ResponsibleIndividualSSN
WHERE D.SequentialNumber = 1