Re: diferencia entre querys
Gracias!
La verdad si ando casi a ciegas, resulta que el cliente que usamos para esa base esta muy controlado y lo peor es que no puedo entrar a la consola de mysql, acabo de averiguar que los demas comandos los limita el programa cliente que se conecta al a base pero logré investigar lo siguiente:
La tabla: C.FZ2S274BITV2
A.NUM_CLIENTE, INT(11) UNSIGNED
A.NUM_CUENTA, VARCHAR (22)
A.NUM_PREFIJOCUENTA, SMALLINT UNSIGNED
A.CVE_TIPOCUENTA SMALLINT UNSIGNED
A.NUM_SUCPROMTORACTA SMALLINT UNSIGNED
Tabla: C.LA1MDA
B.NUMCLIENTE AS Clte_Cta, INT(11) UNSIGNED
B.PREFMDA as Suc_Bin, SMALLINT UNSIGNED
B.CUENTAMDA VARCHAR (22)
Tabla: C.LA1CTE
NUMCLIENTE INT(11) UNSIGNED
También le quité campos poco relevantes a las consultas para que sean ligeramente mas sencillas de leer
QUERY ORIGINAL
SELECT 'Tarj',
A.NUM_CLIENTE,
A.NUM_CUENTA,
A.NUM_PREFIJOCUENTA,
A.CVE_TIPOCUENTA,
B.NUMCLIENTE AS Clte_Cta,
B.PREFMDA as Suc_Bin,
B.CUENTAMDA Cta_Tarj
FROM C.FZ2S274BITV2 A LEFT JOIN C.LA1MDA B
ON A.NUM_PREFIJOCUENTA = B.PREFMDA
AND A.NUM_CUENTA=B.CUENTAMDA
LEFT JOIN C.LA1CTE C
ON B.NUMCLIENTE=C.NUMCLIENTE
WHERE A.NUM_CLIENTE=3873540
AND A.CVE_TIPOCUENTA=3
UNION
SELECT 'Chqs',A.NUM_CLIENTE,
A.NUM_CUENTA,
A.NUM_PREFIJOCUENTA,
A.CVE_TIPOCUENTA,
B.NUMCLIENTE AS Clte_Cta,
B.PREFMDA as Suc_Bin,
B.CUENTAMDA Cta_Tarj
FROM C.FZ2S274BITV2 A LEFT JOIN C.LA1MDA B
ON A.NUM_SUCPROMTORACTA = B.PREFMDA
AND A.NUM_CUENTA=B.CUENTAMDA
LEFT JOIN C.LA1CTE C
ON B.NUMCLIENTE=C.NUMCLIENTE
WHERE A.NUM_CLIENTE=3873540
AND A.CVE_TIPOCUENTA=1
UNION
SELECT 'Interb_Serv_OP',A.NUM_CLIENTE,
A.NUM_CUENTA,
A.NUM_PREFIJOCUENTA,
A.CVE_TIPOCUENTA,
B.NUMCLIENTE AS Clte_Cta,
B.PREFMDA as Suc_Bin,
B.CUENTAMDA Cta_Tarj
FROM C.FZ2S274BITV2 A
WHERE A.NUM_CLIENTE=3873540
AND A.CVE_TIPOCUENTA NOT IN(1,3)
La idea es que construyan una tabla que junte los tres tipos que son 'Tarj', 'Chqs' Y 'Interb_Serv_OP'. Para identificar las tarjetas, el campo A.CVE_TIPOCUENTA debe ser 3, el mismo campo debe ser 1 para 'Chqs' Y no debe ser ninguno de los dos para que lo marque como 'Interb_Serv_OP'
Luego entonces en mi query lo que hice fue poner los mismos campos pero el que "manualmente" le ponen 'tarj, Chqs e Interb' yo lo metí en un CASE, basandome en el campo A.CVE_TIPOCUENTA.
CASE
WHEN A.CVE_TIPOCUENTA=3 THEN 'Tarj'
WHEN A.CVE_TIPOCUENTA=1 THEN 'Chqs'
ELSE 'Interb_Serv_OP'
END AS TIPO
Lo que yo creo que hace la gran diferencia es la forma en la que hice el JOIN
FROM C.FZ2S274BITV2 A LEFT JOIN C.LA1MDA B
ON A.NUM_CUENTA=B.CUENTAMDA
=============== en esencia es esta parte dentro de los paréntesis =============
AND (A.NUM_PREFIJOCUENTA = B.PREFMDA OR A.NUM_SUCPROMTORACTA = B.PREFMDA)
======= lo que yo creo que pudiera estar mal====================================
LEFT JOIN C.LA1CTE C
ON B.NUMCLIENTE=C.NUMCLIENTE
El query completo esta aqui:
SELECT
A.NUM_CLIENTE,
A.NUM_CUENTA,
A.NUM_PREFIJOCUENTA,
A.CVE_TIPOCUENTA,
B.NUMCLIENTE AS Clte_Cta,
B.PREFMDA as Suc_Bin,
B.CUENTAMDA Cta_Tarj
CASE
WHEN A.CVE_TIPOCUENTA=3 THEN 'Tarj'
WHEN A.CVE_TIPOCUENTA=1 THEN 'Chqs'
ELSE 'Interb_Serv_OP'
END AS TIPO
FROM C.FZ2S274BITV2 A
LEFT JOIN C.LA1MDA B
ON A.NUM_CUENTA=B.CUENTAMDA
AND (A.NUM_PREFIJOCUENTA = B.PREFMDA OR A.NUM_SUCPROMTORACTA = B.PREFMDA)
LEFT JOIN C.LA1CTE C
ON B.NUMCLIENTE=C.NUMCLIENTE
WHERE A.NUM_CLIENTE=3873540
Una disculpa grandísima por no poder poner información mas específica pero para poder hacer una solicitud para usar la computadora que tiene acceso es muy tardado entonces ojalá que con estos pocos datos pueda ser de útilidad para ayudarme.
Lo agradezco muchísimo en verdad!