J'ai une requête où je souhaite le résultat de renvoyer le DOB pour une personne en fonction de leur "numéro séquentiel". Il renvoie correctement le nom de l'individu, mais pas leur dob correct. J'utilise une fonction max car j'ai besoin de toutes ces données sur une rangée et si je ne l'utilise pas, je reçois plusieurs rangées s'il y a plus d'une personne à charge associée à un employé.
Toutefois, il tire la Max Dob s'il y a plusieurs personnes à charge et non celle correspondant à D.EncidollyNumber = 1, ce qui n'est pas ce dont j'ai besoin. Qu'est-ce que je manque ici? P>
ci-dessous est un mini échantillon de ma requête: p>
3 Réponses :
Je pense que les conditions sont à l'envers et que vous souhaiterez peut-être:
Max(IIf(D.SequentialNumber=1 and D.CoveredIndividualSSN >0, d.DepDOB, NULL)) AS Cov24_DOB
J'ai besoin que le dob ne soit retourné que s'il n'y a pas de SSN
Je ne suis pas sûr de la requête:
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;
Qu'est-ce que tu n'es pas sûr? Ça marche, je viens de la condenser parce que le tout est énorme
Veuillez clarifier ce que vous n'êtes pas sûr de. Si vous n'êtes pas sûr de la requête originale d'OP, veuillez indiquer ce que vous avez trouvé incorrect. Si vous n'êtes pas sûr de la solution que vous fournissez, envisagez de le tester et de relire votre code pour vous assurer que c'est une réponse précise.
Pas sûr parce que je n'ai pas les données d'échantillonnage, veuillez donc accepter comme réponse si elle fonctionne.
incertain si la requête est censée être scopée à seulement l'employé avec séquentialienNumber = 1, ou si la requête doit gérer toutes les personnes à charge. Pour une meilleure réponse, veuillez clarifier sur l'intention de la requête, car nous pourrons peut-être économiser des étapes en aval avec une meilleure compréhension.
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
Il est destiné à continuer avec des nombres séquentiels supplémentaires, mais une fois que j'ai cette première partie, je peux alors l'appliquer au reste
Tagez votre question avec la base de données que vous utilisez.
Êtes-vous sur l'accès MS?
Oui je suis sur Access @martin
IIF a une valeur de retour en deux parties pour la vraie condition et la valeur de retour pour la fausse condition: iif (EXPR, TruePart, FalsePart)
La requête est-elle censée renvoyer des informations sur les personnes à charge, ou devrait-elle être isolée à l'employé?
Contrairement à d'autres langues,
iif code> dans l'accès nécessite toujours TruePart et FalsePart, même si le faux ne renvoie rien. Voir: support.office.com/ EN-US / Article / ...
@Jennaterral; Veuillez fournir plus d'informations sur votre question.