Tengo 3 tablas:

       Person                        TeamMember                     Provider

 PersonId   PersonName   PersonId   ProviderId    IsLead     ProviderId   ProviderName
---------   ----------   --------  ------------  --------   ------------  --------
  P1         ABC            P1         PR1          Yes          PR1       Provider1
  P2         PQR            P1         PR2          No           PR2       Provider2
                            P1         PR3          No           PR3       Provider3
                          -------------------------------
                            P2         PR1          No
                            P2         PR2          No
                            P2         PR3          No

Y necesito la salida (coincidente PersonId y IsLead = ‘Yes’):

PersonId  PersonName ProviderName
--------- ---------- ------------
  P1       ABC         Provider1
  P2       PQR         NULL

Estoy usando por debajo de inner join en el sobre 3 de las tablas, pero me estoy poniendo las filas duplicadas en el resultado.

  SELECT        P.PersonID, P.PersonName, 
         CASE WHEN TM.IsLead = 'Yes' THEN Pr.ProviderName
              WHEN TM.IsLead = 'No'  THEN NULL END AS ProviderName

  FROM            Person P INNER JOIN TeamMember TM ON P.PersonID = TM.PersonID 
                           INNER JOIN Provider PR ON Pr.ProviderId = TM.ProviderId

Traté de usar distintas, pero incluso eso no ayuda.

Cualquier ayuda sería muy apreciada!

Estás haciendo un «árbol» de unirse. una mesa de la raíz de unirse a dos separadas utilizando diferentes condiciones. Usted está recibiendo el comportamiento esperado. Si se unió a la tabla tiene 4 registros coincidentes, y se unió a la tabla B tiene 8, vas a llegar a 8 filas de registros, donde 4 de ellos tienen valores nulos para los registros. por ejemplo, usted siempre obtendrá tantos registros como sea necesario para manejar todos los registros coincidentes de la max(emparejado) de la tabla.

OriginalEl autor Maltesh | 2014-05-26

1 Comentario

  1. 4

    Para su solución para que funcione correctamente será necesario utilizar un LEFT JOIN y mueva el CASO de la expresión de la cláusula JOIN. Yo creo que el siguiente consulta se ajuste a sus necesidades.

    Usted puede consultar un ejemplo en SQLFIDDLE.

    SELECT
     P.PersonID
     ,P.PersonName
     ,Pr.ProviderName
    FROM Person P
     LEFT JOIN TeamMember TM ON TM.PersonID = P.PersonID
                             AND TM.IsLead = 'Yes'
     LEFT JOIN Provider PR ON Pr.ProviderId = TM.ProviderId
    Funcionó! Muchas gracias

    OriginalEl autor NickyvV

Dejar respuesta

Please enter your comment!
Please enter your name here