Oracle - CASE O IF DENTRO DE UN JOIN EN PLSQL

 
Vista:

CASE O IF DENTRO DE UN JOIN EN PLSQL

Publicado por JESUSC (2 intervenciones) el 08/06/2017 14:39:57
Hola, escribo porque estoy haciendo un query en donde intento colocar una CONDICIÓN dentro de unos join o después del 'Where', el ejemplo del query es el siguiente:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
SELECT Trim(A.EXTERNAL_ID)
  FROM (
  SELECT DISTINCT eqm.external_id , cmfpkg.active_dt, cm.chg_date, serv.service_active_dt,
  To_Char(cm.chg_date,'DD')dia
  FROM arbor.external_id_equip_map eqm
  INNER JOIN  cmf_package_component cmfpkg ON cmfpkg.parent_subscr_no = eqm.subscr_no
  INNER JOIN  cmf cm                       ON   cm.account_no  =   eqm.account_no
  INNER JOIN  arbor.service serv           ON cmfpkg.parent_subscr_no = serv.subscr_no
  WHERE cmfpkg.package_id = 5084
  AND eqm.external_id_type = 11
  AND eqm.inactive_date IS NULL
) a
      WHERE Trunc(a.active_dt) = (IF  a.dia = '05' OR a.dia = '03'
       THEN
        Trunc(SYSDATE)-1
       ELSE
          Trunc(SYSDATE)-1 or Trunc(a.chg_date) = trunc(SYSDATE) -1
       END if)
     ORDER BY a.external_id;

ya que hay un join que depende del día, al hacer esto me da error de: ORA-00907: missing right parenthesis
y creo que tengo bien puestos los paréntesis, nunca he realizado un case después de un where, pero veo que es lo que necesito para este caso

Saludos.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 605
Oro
Ha mantenido su posición en Oracle (en relación al último mes)
Gráfica de Oracle

CASE O IF DENTRO DE UN JOIN EN PLSQL

Publicado por Rafael (328 intervenciones) el 08/06/2017 15:54:30
No se usa IF se usa CASE
algo asi:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
SELECT Trim(A.EXTERNAL_ID)
FROM (
SELECT DISTINCT eqm.external_id , cmfpkg.active_dt, cm.chg_date, serv.service_active_dt,
To_Char(cm.chg_date,'DD')dia
FROM arbor.external_id_equip_map eqm
INNER JOIN cmf_package_component cmfpkg ON cmfpkg.parent_subscr_no = eqm.subscr_no
INNER JOIN cmf cm ON cm.account_no = eqm.account_no
INNER JOIN arbor.service serv ON cmfpkg.parent_subscr_no = serv.subscr_no
WHERE cmfpkg.package_id = 5084
AND eqm.external_id_type = 11
AND eqm.inactive_date IS NULL
) a
WHERE Trunc(a.active_dt) = (CASE WHEN a.dia = '05' OR a.dia = '03' THEN Trunc(SYSDATE)-1 ELSE Trunc(SYSDATE)-1 END)
or Trunc(a.chg_date) = trunc(SYSDATE) -1
ORDER BY a.external_id;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

CASE O IF DENTRO DE UN JOIN EN PLSQL

Publicado por jesusc (2 intervenciones) el 08/06/2017 20:22:31
Gracias, me ayudó su sugerencia a mejorar el query

Saludos..
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar