Question : subquery

Hi experts, i have this query
SELECT t3.login codigodiscente,
       CASE
          WHEN ifl.codcargo IN
                 ('1',
                  '2',
                  '3',
                  '4',
                  '5',
                  '6',
                  '7',
                  '8',
                  '9',
                  '10',
                  '12',
                  '30',
                  '31'
                 )
          AND ifl.codentidad = 'MP'
             THEN 'Magistrados Ministerio Público'
          WHEN ifl.codcargo IN
                 ('1',
                  '2',
                  '3',
                  '4',
                  '5',
                  '6',
                  '7',
                  '8',
                  '9',
                  '10',
                  '12',
                  '30',
                  '31'
                 )
          AND ifl.codentidad = 'PJ'
             THEN 'Magistrados Poder Judicial'
          WHEN ifl.codcargo IN ('20', '23', '24', '25', '28', '29')
             THEN 'Auxiliares de Justicia'
          WHEN ifl.codcargo IN ('21', '26')
             THEN 'Asistente de Funcion Fiscal'
       END cargoentidad
  FROM (SELECT   t2.login, t2.codcurso, t2.cad_admitido, t2.admitido,
                 t2.abreviaturacurso, t2.porcentaje, t2.codsede,
                 SUM (duracion) duracion, SUM (asistencia) asistencia,
                   100
                 * TRUNC ((SUM (asistencia) / SUM (duracion)), 2)
                                                          porcentaje_obtenido
            FROM (SELECT   t.login, t.codcurso, t.cad_admitido, t.admitido,
                           t.abreviaturacurso, t.porcentaje, t.codsede,
                           t.codsesion, t.vez, t.inicio, t.FINAL, t.duracion,
                           0, MIN (fechaasistencia), MAX (fechaasistencia),
                           CEIL
                              (NVL
                                  (  (  (CASE
                                            WHEN MAX (fechaasistencia) >
                                                                       t.FINAL
                                               THEN t.FINAL
                                            ELSE MAX (fechaasistencia)
                                         END
                                        )
                                      - (CASE
                                            WHEN MIN (fechaasistencia) <
                                                                      t.inicio
                                               THEN t.inicio
                                            ELSE MIN (fechaasistencia)
                                         END
                                        )
                                     )
                                   * 24
                                   * 60,
                                   0
                                  )
                              ) asistencia
                      FROM (SELECT   dcp.login, dcp.codcurso,
                                     cad.codcurso cad_admitido,
                                     dcp2.login admitido,
                                     cur.abreviaturacurso, cur.porcentaje,
                                     can.codsede, dse.codsesion, dse.vez,
                                     rep.fechaasistencia,
                                       ses.fechasesion
                                     + (FLOOR (dse.horainicioreal / 100)) / 24
                                     +   MOD (dse.horainicioreal, 100)
                                       / (24 * 60) inicio,
                                       ses.fechasesion
                                     + (FLOOR (dse.horafinreal / 100)) / 24
                                     + MOD (dse.horafinreal, 100) / (24 * 60)
                                                                        FINAL,
                                       24
                                     * 60
                                     * (  (  ses.fechasesion
                                           +   (FLOOR (dse.horafinreal / 100)
                                               )
                                             / 24
                                           +   MOD (dse.horafinreal, 100)
                                             / (24 * 60)
                                          )
                                        - (  ses.fechasesion
                                           +   (FLOOR (dse.horainicioreal
                                                       / 100
                                                      )
                                               )
                                             / 24
                                           +   MOD (dse.horainicioreal, 100)
                                             / (24 * 60)
                                          )
                                       ) duracion,
                                     ses.fechasesion, dse.horainicioreal,
                                     dse.horafinreal, dse.flagactiva
                                FROM inscripcion.sesionxcurso scu INNER JOIN inscripcion.curso cur
                                     ON scu.codcurso = cur.codcurso
                                   AND cur.abreviaturacurso = 'PAP10SNA06'
                                   AND cur.nombrecurso NOT LIKE 'ADMITIDOS%'
                                     INNER JOIN inscripcion.cursoxano can
                                     ON can.codcurso = cur.codcurso
                                     INNER JOIN inscripcion.sesion ses
                                     ON scu.codsesion = ses.codsesion
                                     INNER JOIN inscripcion.detallesesion dse
                                     ON scu.codcurso = dse.codcurso
                                   AND scu.codsesion = dse.codsesion
                                     LEFT JOIN inscripcion.discentexcursoxprograma dcp
                                     ON dcp.codcurso = scu.codcurso
                                     LEFT JOIN inscripcion.reportemovimiento rep
                                     ON rep.codcurso = dse.codcurso
                                   AND rep.codsesion = dse.codsesion
                                   AND rep.vez = dse.vez
                                   AND dcp.login = rep.login
                                     LEFT JOIN
                                     (SELECT can_adm.codcurso,
                                             cur_adm.abreviaturacurso,
                                             can_adm.codsede
                                        FROM inscripcion.curso cur_adm INNER JOIN inscripcion.cursoxano can_adm
                                             ON can_adm.codcurso =
                                                              cur_adm.codcurso
                                       WHERE cur_adm.nombrecurso LIKE
                                                                  'ADMITIDOS%') cad
                                     ON cur.abreviaturacurso =
                                                          cad.abreviaturacurso
                                   AND (   can.codsede = cad.codsede
                                        OR (    can.codsede IN (7, 9, 19, 37)
                                            AND cad.codsede = 19
                                           )
                                       )
                                     LEFT JOIN inscripcion.discentexcursoxprograma dcp2
                                     ON dcp2.codcurso = cad.codcurso
                                   AND dcp2.login = dcp.login
                            ORDER BY dcp.login,
                                     codsesion,
                                     vez,
                                     horainicioreal,
                                     horafinreal) t
                           INNER JOIN
                           (SELECT DISTINCT codcurso, login
                                       FROM inscripcion.reportemovimiento) asis
                           ON asis.codcurso = t.codcurso
                         AND asis.login = t.login
                  GROUP BY t.login,
                           t.codcurso,
                           t.cad_admitido,
                           t.admitido,
                           t.abreviaturacurso,
                           t.porcentaje,
                           t.codsede,
                           t.codsesion,
                           t.vez,
                           t.inicio,
                           t.FINAL) t2
        GROUP BY t2.login,
                 t2.codcurso,
                 t2.cad_admitido,
                 t2.admitido,
                 t2.abreviaturacurso,
                 t2.porcentaje,
                 t2.codsede) t3
       INNER JOIN
       curso cra ON t3.abreviaturacurso = cra.abreviatura
       LEFT JOIN usuario usu ON usu.login = t3.login
      LEFT JOIN infolaboral ifl ON t3.login = ifl.login
       LEFT JOIN distritojudicial dju
       ON dju.coddistritojudicial = ifl.coddistritojudicial

The result of this query is that in some records cargoentidad column is shown in white, see image

I have a query that returns me the data from these records that are null,
SELECT DISTINCT r.login, cu.nombrecargo, dj.nombredistritojudicial
           FROM reportemovimiento r,
                usuario u,
                cargousuario cu,
                distritojudicial dj
          WHERE r.obs IS NULL
            AND r.login = u.login
            AND r.codcurso = 2864
            AND cu.codcargo = u.codcargo
            AND dj.coddistritojudicial = u.coddistritojudicial
This query must be executed only when data are null returns cargoentidad

This is a query in oracle. But I am inviting friends transact sql to help me
Attachments:
 
 

Answer : subquery

What about changing it to this?

1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
160:
161:
162:
163:
164:
165:
166:
167:
168:
169:
170:
171:
172:
173:
174:
175:
176:
177:
178:
179:
180:
181:
182:
183:
184:
185:
186:
187:
188:
189:
190:
191:
192:
193:
194:
195:
196:
197:
198:
199:
200:
201:
202:
203:
204:
205:
206:
207:
208:
209:
210:
211:
212:
213:
214:
215:
216:
217:
218:
219:
220:
221:
222:
223:
224:
225:
226:
227:
228:
229:
230:
231:
232:
233:
234:
235:
236:
237:
238:
239:
240:
241:
242:
243:
SELECT porcentaje_obtenido, cra.codcurso codigoactividad,
       t3.login codigodiscente,
       CASE
          WHEN t3.cad_admitido IS NULL
           OR (t3.cad_admitido IS NOT NULL AND t3.login = t3.admitido)
             THEN CASE
                    WHEN t3.porcentaje_obtenido >= t3.porcentaje
                       THEN 1
                    ELSE 0
                 END
          ELSE 0
       END constancia,
       NULL certificado,
       CASE
          WHEN ifl.codcargo IN
                 ('1',
                  '2',
                  '3',
                  '4',
                  '5',
                  '6',
                  '7',
                  '8',
                  '9',
                  '10',
                  '12',
                  '30',
                  '31'
                 )
          AND ifl.codentidad = 'MP'
             THEN 'Magistrados Ministerio Público'
          WHEN ifl.codcargo IN
                 ('1',
                  '2',
                  '3',
                  '4',
                  '5',
                  '6',
                  '7',
                  '8',
                  '9',
                  '10',
                  '12',
                  '30',
                  '31'
                 )
          AND ifl.codentidad = 'PJ'
             THEN 'Magistrados Poder Judicial'
          WHEN ifl.codcargo IN ('20', '23', '24', '25', '28', '29')
             THEN 'Auxiliares de Justicia'
          WHEN ifl.codcargo IN ('21', '26')
             THEN 'Asistente de Funcion Fiscal'
	  WHEN ifl.codcargo is null 
		THEN (
		 SELECT distinct(cu.nombrecargo)
                 FROM reportemovimiento r,
                      inscripcion.usuario u,
                      inscripcion.cargousuario cu,
                      distritojudicial dj
                WHERE r.obs IS NULL
                  AND r.login = u.login
                  AND r.codcurso = 2864
                  AND cu.codcargo = u.codcargo
                  AND dj.coddistritojudicial = u.coddistritojudicial
               AND r.login = usu.login
		)
       END cargoentidad,
          CASE
             WHEN ifl.codcargo IN
                    ('1',
                     '2',
                     '3',
                     '4',
                     '5',
                     '6',
                     '7',
                     '8',
                     '9',
                     '10',
                     '12',
                     '30',
                     '31'
                    )
                THEN 'Magistrado '
             WHEN ifl.codcargo IN
                             ('20', '21', '23', '24', '25', '26', '28', '29')
                THEN 'Auxiliar '
          END
       || CASE ifl.codentidad
             WHEN 'MP'
                THEN    'Ministerio Público del Distrito '
                     || dju.nombredistritojudicial
             WHEN 'PJ'
                THEN    'Corte Superior de Justicia '
                     || dju.nombredistritojudicial
             ELSE 'Otros'
          END descripcioncargo,
       dju.nombredistritojudicial distritojudicial,
       CASE ifl.codentidad
          WHEN 'MP'
             THEN ' Ministerio Público '
          WHEN 'PJ'
             THEN ' Corte Superior de Justicia '
       END entidad,
       NULL notafinalcurso, 'REG' situaciondiscente
  FROM (SELECT   t2.login, t2.codcurso, t2.cad_admitido, t2.admitido,
                 t2.abreviaturacurso, t2.porcentaje, t2.codsede,
                 SUM (duracion) duracion, SUM (asistencia) asistencia,
                   100
                 * TRUNC ((SUM (asistencia) / SUM (duracion)), 2)
                                                          porcentaje_obtenido
            FROM (SELECT   t.login, t.codcurso, t.cad_admitido, t.admitido,
                           t.abreviaturacurso, t.porcentaje, t.codsede,
                           t.codsesion, t.vez, t.inicio, t.FINAL, t.duracion,
                           0, MIN (fechaasistencia), MAX (fechaasistencia),
                           CEIL
                              (NVL
                                  (  (  (CASE
                                            WHEN MAX (fechaasistencia) >
                                                                       t.FINAL
                                               THEN t.FINAL
                                            ELSE MAX (fechaasistencia)
                                         END
                                        )
                                      - (CASE
                                            WHEN MIN (fechaasistencia) <
                                                                      t.inicio
                                               THEN t.inicio
                                            ELSE MIN (fechaasistencia)
                                         END
                                        )
                                     )
                                   * 24
                                   * 60,
                                   0
                                  )
                              ) asistencia
                      FROM (SELECT   dcp.login, dcp.codcurso,
                                     cad.codcurso cad_admitido,
                                     dcp2.login admitido,
                                     cur.abreviaturacurso, cur.porcentaje,
                                     can.codsede, dse.codsesion, dse.vez,
                                     rep.fechaasistencia,
                                       ses.fechasesion
                                     + (FLOOR (dse.horainicioreal / 100)) / 24
                                     +   MOD (dse.horainicioreal, 100)
                                       / (24 * 60) inicio,
                                       ses.fechasesion
                                     + (FLOOR (dse.horafinreal / 100)) / 24
                                     + MOD (dse.horafinreal, 100) / (24 * 60)
                                                                        FINAL,
                                       24
                                     * 60
                                     * (  (  ses.fechasesion
                                           +   (FLOOR (dse.horafinreal / 100)
                                               )
                                             / 24
                                           +   MOD (dse.horafinreal, 100)
                                             / (24 * 60)
                                          )
                                        - (  ses.fechasesion
                                           +   (FLOOR (dse.horainicioreal
                                                       / 100
                                                      )
                                               )
                                             / 24
                                           +   MOD (dse.horainicioreal, 100)
                                             / (24 * 60)
                                          )
                                       ) duracion,
                                     ses.fechasesion, dse.horainicioreal,
                                     dse.horafinreal, dse.flagactiva
                                FROM inscripcion.sesionxcurso scu INNER JOIN inscripcion.curso cur
                                     ON scu.codcurso = cur.codcurso
                                   AND cur.abreviaturacurso = 'PAP10SNA06'
                                   AND cur.nombrecurso NOT LIKE 'ADMITIDOS%'
                                     INNER JOIN inscripcion.cursoxano can
                                     ON can.codcurso = cur.codcurso
                                     INNER JOIN inscripcion.sesion ses
                                     ON scu.codsesion = ses.codsesion
                                     INNER JOIN inscripcion.detallesesion dse
                                     ON scu.codcurso = dse.codcurso
                                   AND scu.codsesion = dse.codsesion
                                     LEFT JOIN inscripcion.discentexcursoxprograma dcp
                                     ON dcp.codcurso = scu.codcurso
                                     LEFT JOIN inscripcion.reportemovimiento rep
                                     ON rep.codcurso = dse.codcurso
                                   AND rep.codsesion = dse.codsesion
                                   AND rep.vez = dse.vez
                                   AND dcp.login = rep.login
                                     LEFT JOIN
                                     (SELECT can_adm.codcurso,
                                             cur_adm.abreviaturacurso,
                                             can_adm.codsede
                                        FROM inscripcion.curso cur_adm INNER JOIN inscripcion.cursoxano can_adm
                                             ON can_adm.codcurso =
                                                              cur_adm.codcurso
                                       WHERE cur_adm.nombrecurso LIKE
                                                                  'ADMITIDOS%') cad
                                     ON cur.abreviaturacurso =
                                                          cad.abreviaturacurso
                                   AND (   can.codsede = cad.codsede
                                        OR (    can.codsede IN (7, 9, 19, 37)
                                            AND cad.codsede = 19
                                           )
                                       )
                                     LEFT JOIN inscripcion.discentexcursoxprograma dcp2
                                     ON dcp2.codcurso = cad.codcurso
                                   AND dcp2.login = dcp.login
                            ORDER BY dcp.login,
                                     codsesion,
                                     vez,
                                     horainicioreal,
                                     horafinreal) t
                           INNER JOIN
                           (SELECT DISTINCT codcurso, login
                                       FROM inscripcion.reportemovimiento) asis
                           ON asis.codcurso = t.codcurso
                         AND asis.login = t.login
                  GROUP BY t.login,
                           t.codcurso,
                           t.cad_admitido,
                           t.admitido,
                           t.abreviaturacurso,
                           t.porcentaje,
                           t.codsede,
                           t.codsesion,
                           t.vez,
                           t.inicio,
                           t.FINAL) t2
        GROUP BY t2.login,
                 t2.codcurso,
                 t2.cad_admitido,
                 t2.admitido,
                 t2.abreviaturacurso,
                 t2.porcentaje,
                 t2.codsede) t3
       INNER JOIN
       curso cra ON t3.abreviaturacurso = cra.abreviatura
       LEFT JOIN usuario usu ON usu.login = t3.login
      LEFT JOIN infolaboral ifl ON t3.login = ifl.login
       LEFT JOIN distritojudicial dju
       ON dju.coddistritojudicial = ifl.coddistritojudicial
Random Solutions  
 
programming4us programming4us