problemas con select

05/08/2003 - 15:17 por Denny Torcates | Informe spam
Un saludo a toda la comunidad

Estimados amigos tengo un detalle con este select por que
tengo un sistema que controla facturas de un cliente
eldetalle esta en los siguiente:


la factura posee 3 detalles ,es decir ,que se facturan 3
servicios

aunado a esta la factura es cancelada con 3 ó mas
pagos,bien sea deposito,cheques o ambas (cheques y
deposito).Fijense en este select


"Select pagos.*,detalle.cod_servicio,detalle.monto_unit
from pagos,detalle where pagos.Nro_factura='504' and
pagos.transaccion='F' AND pagos.Regional='R1' and
detalle.nro_factura=pagos.nro_factura and
detalle.regional=pagos.regional and
detalle.transaccion=pagos.transaccion"

cuando ejecuto dicho select en QA el resultado de la
consulta encuentra
9 resultados del select cuando deberia conseguir "solo 3
pagos de acuerdo con los pagos relacionados"

Mi pregunta es:¿ que instruccion SQL debo utilizar para
obtener los resulatdos que deseo?

de antemano gracias
Denny Torcates.-

Preguntas similare

Leer las respuestas

#1 Emilio Boucau
05/08/2003 - 16:45 | Informe spam
Denny,

te recomiendo que codifiques de esta forma:

SELECT PAGOS.*, DETALLE.COD_SERVICIO, DETALLE.MONTO_UNIT
FROM PAGOS

INNER JOIN DETALLE
ON PAGOS.NRO_FACTURA = DETALLE.NRO_FACTURA
AND PAGOS.REGIONAL = DETALLE.REGIONAL
AND PAGOS.TRANSACCION = DETALLE.TRANSACCION

WHERE PAGOS.NRO_FACTURA = '504' AND
PAGOS.TRANSACCION = 'F' AND
PAGOS.REGIONAL = 'R1'

el optimizador hara un mejor trabajo con la consulta y quedara mas
claramente planteada la condicion del WHERE.
Yo hice esta prueba y ambos me devolvieron la cantidad correcta de filas
Fijate bien, porque debes tener algun error sutil en tu consulta.

SELECT COUNT(*)
FROM T_MODELOS_CIA
WHERE T_MODELOS_CIA.COMPANIA = '121' AND
T_MODELOS_CIA.VEHICULO_TIPO = 'AA' AND
T_MODELOS_CIA.VEHICULO_FABRICA = '024' AND
T_MODELOS_CIA.VEHICULO_MODELO = '100' AND
T_MODELOS_CIA.VEHICULO_MOTOR = 'N'

SELECT TM.*, TMC.*
FROM T_MODELOS_CIA AS TMC

INNER JOIN T_MODELOS AS TM
ON TMC.VEHICULO_TIPO = TM.VEHICULO_TIPO AND
TMC.VEHICULO_FABRICA = TM.VEHICULO_FABRICA AND
TMC.VEHICULO_MODELO = TM.VEHICULO_MODELO AND
TMC.VEHICULO_MOTOR = TM.VEHICULO_MOTOR

WHERE TMC.COMPANIA = '121' AND
TMC.VEHICULO_TIPO = 'AA' AND
TMC.VEHICULO_FABRICA = '024' AND
TMC.VEHICULO_MODELO = '100' AND
TMC.VEHICULO_MOTOR = 'N'


SELECT T_MODELOS.*, T_MODELOS_CIA.*
FROM T_MODELOS_CIA, T_MODELOS
WHERE T_MODELOS_CIA.COMPANIA = '121' AND
T_MODELOS_CIA.VEHICULO_TIPO = 'AA' AND
T_MODELOS_CIA.VEHICULO_FABRICA = '024' AND
T_MODELOS_CIA.VEHICULO_MODELO = '100' AND
T_MODELOS_CIA.VEHICULO_MOTOR = 'N' AND
T_MODELOS_CIA.VEHICULO_TIPO = T_MODELOS.VEHICULO_TIPO AND
T_MODELOS_CIA.VEHICULO_FABRICA = T_MODELOS.VEHICULO_FABRICA AND
T_MODELOS_CIA.VEHICULO_MODELO = T_MODELOS.VEHICULO_MODELO AND
T_MODELOS_CIA.VEHICULO_MOTOR = T_MODELOS.VEHICULO_MOTOR

Saludos !

Emilio Boucau
Microsoft MVP SQL Server
http://www.portalsql.com
PASS Spanish Group
http://www.sqlpass.org

Buenos Aires - Argentina
Respuesta Responder a este mensaje
#2 Liliana Sorrentino
05/08/2003 - 17:30 | Informe spam
Hola Denny:
El código es mucho más complejo que lo que vos habías preparado.
Asumo que Pagos tiene una fecha.
Lo complicado es porque necesitás un número de orden por grupo, que no está
en las tablas origen, por eso se genera con tablas derivadas. De tenerlo ya
implementado, sería mucho más sencillo.
Espero que te sirva... Liliana.

SELECT pag_orden.Nro_factura, pag_orden.transaccion, pag_orden.Regional,
pag_orden.importe,
det_orden.Nro_factura, det_orden.transaccion, det_orden.Regional,
det_orden.cod_servicio, det_orden.monto_unit
FROM (SELECT Nro_factura = p1.Nro_factura,
transaccion = p1.transaccion,
Regional = p1.Regional,
importe = p1.importe,
orden = (SELECT COUNT(*)
FROM #pagos p2
WHERE p1.Nro_factura = p2.Nro_factura AND p1.fecha >= p2.fecha
GROUP BY p1.Nro_factura)
FROM #pagos p1) AS pag_orden

FULL JOIN
(SELECT Nro_factura = d1.Nro_factura,
transaccion = d1.transaccion,
Regional = d1.Regional,
cod_servicio = d1.cod_servicio,
monto_unit = d1.monto_unit,
orden = (SELECT COUNT(*)
FROM #detalle d2
WHERE d1.Nro_factura = d2.Nro_factura AND d1.cod_servicio >d2.cod_servicio
GROUP BY d1.Nro_factura)
FROM #detalle d1) AS det_orden

ON
det_orden.nro_factura=pag_orden.nro_factura AND
det_orden.regional=pag_orden.regional AND
det_orden.transaccion=pag_orden.transaccion AND
det_orden.orden=pag_orden.orden
/*
WHERE (pag_orden.Nro_factura='504' AND
pag_orden.transaccion='F' AND
pag_orden.Regional='R1') OR
(det_orden.Nro_factura='504' AND
det_orden.transaccion='F' AND
det_orden.Regional='R1')
*/
ORDER BY pag_orden.Nro_factura, pag_orden.transaccion, pag_orden.Regional
COMPUTE SUM(pag_orden.importe), SUM(det_orden.monto_unit)
BY pag_orden.Nro_factura, pag_orden.transaccion, pag_orden.Regional
"Denny Torcates" escribió en el mensaje
news:0cbc01c35b53$faa77ec0$
Un saludo a toda la comunidad

Estimados amigos tengo un detalle con este select por que
tengo un sistema que controla facturas de un cliente
eldetalle esta en los siguiente:


la factura posee 3 detalles ,es decir ,que se facturan 3
servicios

aunado a esta la factura es cancelada con 3 ó mas
pagos,bien sea deposito,cheques o ambas (cheques y
deposito).Fijense en este select


"Select pagos.*,detalle.cod_servicio,detalle.monto_unit
from pagos,detalle where pagos.Nro_factura='504' and
pagos.transaccion='F' AND pagos.Regional='R1' and
detalle.nro_factura=pagos.nro_factura and
detalle.regional=pagos.regional and
detalle.transaccion=pagos.transaccion"

cuando ejecuto dicho select en QA el resultado de la
consulta encuentra
9 resultados del select cuando deberia conseguir "solo 3
pagos de acuerdo con los pagos relacionados"

Mi pregunta es:¿ que instruccion SQL debo utilizar para
obtener los resulatdos que deseo?

de antemano gracias
Denny Torcates.-
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida