Quantcast
Channel: Filtrar datos de la tabla antes de hacer el Left Join - Stack Overflow en español
Viewing all articles
Browse latest Browse all 3

Filtrar datos de la tabla antes de hacer el Left Join

$
0
0

Se me ha presentado un caso que no se como resolver, estoy intentando filtrar ciertos datos de varias tablas, en este caso pondré solamente una muestra del caso de uso que no se como resolver.

Tabla ESTATUSEMPLEADO : (Tiene muchos mas campos, solo es una muestra)

╔══════════╦═══════╦══════╗║ Codigo   ║ Nombre║ .... ║╠══════════╬═══════╬══════╣║ 1        ║ Juan  ║ .... ║║ 2        ║ José║ .... ║║ 3        ║ Maria ║ .... ║║ 4        ║ Joel  ║ .... ║║ 5        ║ Ramón ║ .... ║║ 6        ║ Teresa║ .... ║║ ....     ║ ....  ║ .... ║╚══════════╩═══════╩══════╝

Tabla NOTIFICACION: (En esta el campo Codigo se puede repetir, es una tabla de Detalles...)

╔══════════╦═══════╦═══════╦════════════╗║ Codigo   ║ Estado║ UserN ║ OtroCampo  ║╠══════════╬═══════╬═══════╬════════════╣║ 4        ║ N     ║ admin ║ Dato1      ║║ 1        ║ S     ║ admin ║ Dato2      ║║ 6        ║ N     ║ admin ║ Dato3      ║║ 1        ║ N     ║ otro  ║ Dato4      ║╚══════════╩═══════╩═══════╩════════════╝

SELECT e.Codigo, e.Nombre,       Leida = case when n.Estado = 'S' then 'S' else 'N' end,       n.OtroCampo,FROM ESTATUSEMPLEADO e LEFT JOIN NOTIFICACION n  ON e.Codigo = n.Codigo AND n.UserN = 'admin' AND n.Estado in('N')WHERE e.AlgunCampo = ....

Resultado deseado:

╔══════════╦═════════╦═══════╦════════════╗║ Codigo   ║ Nombre  ║ Leida ║ OtroCampo  ║╠══════════╬═════════╬═══════╬════════════╣║ 2        ║ José║ N     ║ NULL       ║║ 3        ║ Maria   ║ N     ║ NULL       ║║ 4        ║ Joel    ║ N     ║ Dato1      ║║ 5        ║ Ramón   ║ N     ║ NULL       ║║ 6        ║ Teresa  ║ N     ║ Dato3      ║╚══════════╩═════════╩═══════╩════════════╝

Con este select me esta mostrando todos los datos de la tabla ESTATUSEMPLEADO el filtro del UserN funciona correctamente, cuando también quiero filtrar por el Estado no filtra los datos correctamente, debe excluirme el Codigo = 1 ya que estoy filtrando que el Estado = 'N' en cambio me lo está mostrando en el resultado y me muestra el campo Leida = 'N'.

  • No estoy usando WHERE para filtrar la tabla NOTIFICACION debido a que esta tabla puede o no contener registros, y si lo realizo en el Where, solo me mostrará los datos que se encuentren en esta tabla.

  • WHERE e.AlgunCampo = .... (Esto es porque también tengo algunas condiciones pero pertenecientes a la tabla ESTATUSEMPLEADO)

  • Utilizo n.Estado in('N') ya que hay momentos en que tengo que filtar los S y N.

Deseo obtener todos los datos de la tabla ESTATUSEMPLEADO y hacer la unión izquierda con la tabla NOTIFICACION, para filtrar los datos y que solo me muestre los datos que cumplan con las condiciones especificadas.

Entorno: SQL Server 2008 R2

Si mi pregunta no es del todo clara, por favor plantear las dudas en los comentarios. Gracias.


Viewing all articles
Browse latest Browse all 3


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>