Ver Mensaje Individual
  #6 (permalink)  
Antiguo 17/08/2011, 01:03
licu
 
Fecha de Ingreso: noviembre-2007
Mensajes: 28
Antigüedad: 12 años, 2 meses
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