Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Excluir datos según equivalencia

Estas en el tema de Excluir datos según equivalencia en el foro de SQL Server en Foros del Web. Hola buen día, deseo ayuda para excluir datos según su equivalencia. Por ejemplo: idPersona------Documento-----------------------cveDocumento----existeDoc 1-----------------Póliza------------------------------1---------------------si 1-----------------Comprobante de domicilio-------------2---------------------si 2-----------------Acta de nacimiento------------------7---------------------si 2-----------------CURP -------------------------------8---------------------no 1-----------------Identificación oficial-----------------3---------------------si ...
  #1 (permalink)  
Antiguo 16/08/2011, 04:49
 
Fecha de Ingreso: noviembre-2007
Mensajes: 28
Antigüedad: 17 años
Puntos: 0
Excluir datos según equivalencia

Hola buen día, deseo ayuda para excluir datos según su equivalencia. Por ejemplo:


idPersona------Documento-----------------------cveDocumento----existeDoc
1-----------------Póliza------------------------------1---------------------si
1-----------------Comprobante de domicilio-------------2---------------------si
2-----------------Acta de nacimiento------------------7---------------------si
2-----------------CURP -------------------------------8---------------------no
1-----------------Identificación oficial-----------------3---------------------si
3-----------------Acta de nacimiento------------------7---------------------si
3-----------------CURP -------------------------------8---------------------no
3-----------------Constancia de estudios------------9---------------------no
4-----------------Acta de nacimiento------------------7---------------------no
4-----------------CURP -------------------------------8---------------------si
4-----------------Constancia de estudios------------9---------------------no
5-----------------Acta de nacimiento------------------7---------------------si
5-----------------CURP -------------------------------8---------------------no

Si acta de nacimiento y curp son equivalentes, osea si existe uno no debería mostrarse el otro, obviamente de acuerdo al idPersona:

idPersona------Documento-----------------------cveDocumento----existeDoc
1-----------------Póliza------------------------------1---------------------si
1-----------------Comprobante de domicilio-------------2---------------------si
2-----------------Acta de nacimiento------------------7---------------------si
1-----------------Identificación oficial-----------------3---------------------si
3-----------------Acta de nacimiento------------------7---------------------si
3-----------------Constancia de estudios------------9---------------------no
4-----------------CURP -------------------------------8---------------------si
4-----------------Constancia de estudios------------9---------------------no
5-----------------Acta de nacimiento------------------7---------------------si

Agradezco toda ayuda, información u orientación. Saludos...
  #2 (permalink)  
Antiguo 16/08/2011, 08:03
Avatar de vrenzo  
Fecha de Ingreso: febrero-2007
Mensajes: 289
Antigüedad: 17 años, 9 meses
Puntos: 15
Respuesta: Excluir datos según equivalencia

No me queda claro en función aque descartas CURP o Acta de nacimiento ... a cveDocumento sea mayor o menos o que existeDoc sea Si o NO

Esta claro que quieres que no muestre los dos valores ... pero en que casos debe mostrar uno u otro...
__________________
***
Saludos.
  #3 (permalink)  
Antiguo 16/08/2011, 08:54
 
Fecha de Ingreso: noviembre-2007
Mensajes: 28
Antigüedad: 17 años
Puntos: 0
Respuesta: Excluir datos según equivalencia

Hola vrenzo, tomando por ejemplo el idPersona 3 que suponiendo corresponde a Luis Mendez, según los datos son los siguientes:

3-----------------Acta de nacimiento------------------7---------------------si
3-----------------CURP -------------------------------8---------------------no
3-----------------Constancia de estudios------------9---------------------no

Bien, si ya tiene Acta de nacimiento no es necesario que indique que no tiene CURP. Digamos que un documento cubre a otro. Si presentase CURP no es necesario que presente Acta de nacimiento, es una regla 'fuera' de tabla, digamos que sólo sería una condición en la consulta... Entonces mi pregunta va enfocada a esa condición, cómo estructurar la consulta para preguntar que si Luis Mendez ya tiene acta de nacimiento que no me muestre curp.

3-----------------Acta de nacimiento------------------7---------------------si
3-----------------Constancia de estudios------------9---------------------no
  #4 (permalink)  
Antiguo 16/08/2011, 10:17
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: Excluir datos según equivalencia

select case
when acta_nacimiento='si' then curp='' else curp=curp from tabla


Seria algo mas o menos asi, estructura esta condicion para tu consulta :), saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 16/08/2011, 11:07
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 10 meses
Puntos: 447
Respuesta: Excluir datos según equivalencia

Hola licu:

No estoy seguro si la opción del CASE que te propone Libras sea realmente lo que necesitas, ya que a mi parecer lo que quieres es FILTRAR REGISTROS, por lo tanto creo yo que sería más conveniente utilizar un NOT EXISTS, la cuestión es dar con la condición requerida...

Según yo en palabras sería más o menos así:

--> para pintar todos los documentos que sean diferentes de acta y CURP
Código:
Todos los registros de la tabla para cveDocumento diferente de 7 y 8
 (que corresponden al acta y al CURP)
--> para pintar todos los documentos que sean acta y CURP
si es que existe el doc
Código:
+ (OR) 
todos los registros con cveDocumento 7 y 8 
Y existeDoc = 'si'
--> para pintar las actas con existeDoc = no si y solo si no existe la CURP
Código:
+ (OR) 
todos los registros donde cveDocumento sea 7 y existeDoc = 'no' 
SIEMPRE Y CUANDO NO EXISTA un cveDocumento = 8 con existeDoc = 'si' 
para el mismo empleado
--> para pintar la CURP con existeDoc = no si y solo si no existe acta
Código:
+ (OR)
todos los registros donde cveDocumento sea 8 y existeDoc = 'no' 
SIEMPRE Y CUANDO NO EXISTA un cveDocumento = 7 con existeDoc = 'si' 
para el mismo empleado
Trata de traducir esto a lenguaje SQL utilizando AND y OR según sea el caso

te recuerdo que para poder utilizar dos veces la misma tabla en el FROM y en el EXISTE puedes hacer uso de ALIAS

Cita:
FROM TuTabla T1
where NOT EXISTS (Select * FROM TuTabla T2
where
T1.idPersona = T2.idPersona and ..............)
Si tienes problemas para dar con la consulta postea algo de lo que intentaste hacer para ayudarte a afinarla.

Saludos
Leo.
  #6 (permalink)  
Antiguo 17/08/2011, 00:03
 
Fecha de Ingreso: noviembre-2007
Mensajes: 28
Antigüedad: 17 años
Puntos: 0
Respuesta: Excluir datos según equivalencia

He hecho lo siguiente, no se que tan viable sea hacerlo de esta manera, en cuestiones de rendimiento desconozco como actúa case después de where.

Código SQL:
Ver original
  1. SELECT *
  2. FROM (
  3.         /*
  4.             Se obtienen los docs. básicos que debe tener por cada integrante
  5.         */
  6.         SELECT i.NumEntFed, i.AnioInscripcion, i.ProgFamilia,
  7.             i.Identificador, i.Nombre, i.ApellidoPaterno, i.ApellidoMaterno,
  8.             i.FechaNacimiento, i.Parentesco, i.Estudia,
  9.             pd.idDocumento, pd.prioridad, cd.abreviatura
  10.         FROM essv1.dbo.oprIntegrantes i LEFT JOIN sce.dbo.parentesco_documento pd
  11.             ON i.Parentesco = pd.claveParentesco
  12.             LEFT JOIN sceimg.dbo.catalogoDocs cd
  13.             ON pd.idDocumento = cd.idDocumento
  14.         WHERE i.NumEntFed = '2'
  15.             AND i.AnioInscripcion = '02'
  16.             AND ProgFamilia = '00001'
  17.             -- Docs. personales bás. (1), docs. seg. bás. (10).
  18.             AND pd.prioridad IN (1,10)
  19.  
  20.         UNION ALL
  21.         /*
  22.             Se obtienen personas que requieren constancia de estudios,
  23.            
  24.         */
  25.         SELECT i.NumEntFed, i.AnioInscripcion, i.ProgFamilia,
  26.             i.Identificador, i.Nombre, i.ApellidoPaterno, i.ApellidoMaterno,
  27.             i.FechaNacimiento, i.Parentesco, i.Estudia,
  28.             pd.idDocumento, pd.prioridad, cd.abreviatura
  29.         FROM essv1.dbo.oprIntegrantes i LEFT JOIN sce.dbo.parentesco_documento pd
  30.             ON i.Parentesco = pd.claveParentesco
  31.             LEFT JOIN sceimg.dbo.catalogoDocs cd
  32.             ON pd.idDocumento = cd.idDocumento
  33.         WHERE i.NumEntFed = '2'
  34.             AND i.AnioInscripcion = '02'
  35.             AND i.ProgFamilia = '00001'
  36.             -- Hijo, nieto, sobrino, hijo adoptado, hijastro.
  37.             AND i.Parentesco IN (3,03,9,09,10,14,16) AND i.Discapacidad = 0
  38.             AND CAST(datediff(dd,i.FechaNacimiento,dateadd(dd,1,GETDATE())) / 365.25 AS INT) >= 18
  39.             -- Constancia de estudios, clave 11
  40.             AND pd.idDocumento = (11)
  41.     ) dr
  42. LEFT JOIN (
  43.         /*
  44.             Documentos existentes en expediente
  45.         */
  46.         SELECT
  47.             i.Identificador,
  48.             cd.idDocumento, cd.descripcion
  49.         FROM essv1.dbo.oprIntegrantes i, sceimg.dbo.documentos d, sceimg.dbo.catalogoDocs cd  
  50.         WHERE i.NumEntFed = d.numEntFed
  51.             AND i.AnioInscripcion = d.anioInscripcion
  52.             AND i.ProgFamilia = d.progFamilia
  53.             AND i.Identificador = d.idPropietario
  54.             AND d.idDocumento = cd.idDocumento
  55.             AND i.NumEntFed = '2'
  56.             AND i.AnioInscripcion = '02'
  57.             AND i.ProgFamilia = '00001'
  58. ) de ON dr.idDocumento = de.idDocumento
  59.     AND dr.Identificador = de.Identificador
  60.     WHERE dr.idDocumento= CASE
  61.                             WHEN dr.idDocumento IN (8) AND EXISTS  
  62.                                             (SELECT dii.idDocumento FROM essv1.dbo.oprIntegrantes ii, sceimg.dbo.documentos dii
  63.                                             WHERE ii.Identificador = dr.Identificador
  64.                                                     AND ii.numEntFed = dr.NumEntFed
  65.                                                     AND ii.anioInscripcion = dr.AnioInscripcion
  66.                                                     AND ii.progFamilia = dr.ProgFamilia
  67.                                                     AND dii.numEntFed = ii.NumEntFed
  68.                                                     AND dii.anioInscripcion = ii.AnioInscripcion
  69.                                                     AND dii.progFamilia = ii.ProgFamilia
  70.                                                     AND dii.idPropietario = ii.Identificador
  71.                                                     AND dii.idDocumento IN (8)
  72.                                                     ) THEN dr.idDocumento
  73.                             WHEN dr.idDocumento IN (9) AND EXISTS  
  74.                                             (SELECT dii.idDocumento FROM essv1.dbo.oprIntegrantes ii, sceimg.dbo.documentos dii
  75.                                             WHERE ii.Identificador = dr.Identificador
  76.                                                     AND ii.numEntFed = dr.NumEntFed
  77.                                                     AND ii.anioInscripcion = dr.AnioInscripcion
  78.                                                     AND ii.progFamilia = dr.ProgFamilia
  79.                                                     AND dii.numEntFed = ii.NumEntFed
  80.                                                     AND dii.anioInscripcion = ii.AnioInscripcion
  81.                                                     AND dii.progFamilia = ii.ProgFamilia
  82.                                                     AND dii.idPropietario = ii.Identificador
  83.                                                     AND dii.idDocumento IN (9)
  84.                                                     ) THEN dr.idDocumento
  85.                             WHEN dr.idDocumento IN (8) AND NOT EXISTS  
  86.                                             (SELECT dii.idDocumento FROM essv1.dbo.oprIntegrantes ii, sceimg.dbo.documentos dii
  87.                                             WHERE ii.Identificador = dr.Identificador
  88.                                                     AND ii.numEntFed = dr.NumEntFed
  89.                                                     AND ii.anioInscripcion = dr.AnioInscripcion
  90.                                                     AND ii.progFamilia = dr.ProgFamilia
  91.                                                     AND dii.numEntFed = ii.NumEntFed
  92.                                                     AND dii.anioInscripcion = ii.AnioInscripcion
  93.                                                     AND dii.progFamilia = ii.ProgFamilia
  94.                                                     AND dii.idPropietario = ii.Identificador
  95.                                                     AND dii.idDocumento IN (8)
  96.                                                     ) AND  EXISTS  
  97.                                             (SELECT dii.idDocumento FROM essv1.dbo.oprIntegrantes ii, sceimg.dbo.documentos dii
  98.                                             WHERE ii.Identificador = dr.Identificador
  99.                                                     AND ii.numEntFed = dr.NumEntFed
  100.                                                     AND ii.anioInscripcion = dr.AnioInscripcion
  101.                                                     AND ii.progFamilia = dr.ProgFamilia
  102.                                                     AND dii.numEntFed = ii.NumEntFed
  103.                                                     AND dii.anioInscripcion = ii.AnioInscripcion
  104.                                                     AND dii.progFamilia = ii.ProgFamilia
  105.                                                     AND dii.idPropietario = ii.Identificador
  106.                                                     AND dii.idDocumento IN (9)
  107.                                                     )THEN NULL
  108.                             WHEN dr.idDocumento IN (9) AND NOT EXISTS  
  109.                                             (SELECT dii.idDocumento FROM essv1.dbo.oprIntegrantes ii, sceimg.dbo.documentos dii
  110.                                             WHERE ii.Identificador = dr.Identificador
  111.                                                     AND ii.numEntFed = dr.NumEntFed
  112.                                                     AND ii.anioInscripcion = dr.AnioInscripcion
  113.                                                     AND ii.progFamilia = dr.ProgFamilia
  114.                                                     AND dii.numEntFed = ii.NumEntFed
  115.                                                     AND dii.anioInscripcion = ii.AnioInscripcion
  116.                                                     AND dii.progFamilia = ii.ProgFamilia
  117.                                                     AND dii.idPropietario = ii.Identificador
  118.                                                     AND dii.idDocumento IN (9)
  119.                                                     ) AND  EXISTS  
  120.                                             (SELECT dii.idDocumento FROM essv1.dbo.oprIntegrantes ii, sceimg.dbo.documentos dii
  121.                                             WHERE ii.Identificador = dr.Identificador
  122.                                                     AND ii.numEntFed = dr.NumEntFed
  123.                                                     AND ii.anioInscripcion = dr.AnioInscripcion
  124.                                                     AND ii.progFamilia = dr.ProgFamilia
  125.                                                     AND dii.numEntFed = ii.NumEntFed
  126.                                                     AND dii.anioInscripcion = ii.AnioInscripcion
  127.                                                     AND dii.progFamilia = ii.ProgFamilia
  128.                                                     AND dii.idPropietario = ii.Identificador
  129.                                                     AND dii.idDocumento IN (8)
  130.                                                     )THEN NULL     
  131.                             ELSE dr.idDocumento
  132.                             END
  133.  
  134. ORDER BY dr.Identificador, dr.idDocumento

Etiquetas: excluir
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 23:15.