MySQL Forums
Forum List  »  Spanish

Re: diferencia entre querys
Posted by: Francisco Pastrana
Date: July 25, 2013 11:38AM

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!

Options: ReplyQuote


Subject
Views
Written By
Posted
7446
July 24, 2013 04:47PM
787
July 25, 2013 10:01AM
Re: diferencia entre querys
1285
July 25, 2013 11:38AM


Sorry, you can't reply to this topic. It has been closed.

Content reproduced on this site is the property of the respective copyright holders. It is not reviewed in advance by Oracle and does not necessarily represent the opinion of Oracle or any other party.