**Consulta SQL**

08/07/2004 - 22:16 por Pedro Pérez | Informe spam
Amigos:

Vamos a ver si me entienden con esta situación en una consulta que se me
ha presentado. Tengo el siguiente query:


SELECT seleccion, transaccion, fecha, documento, concepto, cuenta,
SUM(DISTINCT monto) AS monto FROM


(SELECT 0 AS seleccion, cptransaccioncabecera.ttransaccion AS transaccion,
CONVERT(char(10), cptransaccioncabecera.tfecha, 103) AS fecha,
tdocumento AS documento,
cptransaccioncabecera.tconcepto AS concepto, '' AS cuenta,
cptransaccion.tmonto AS monto, ttipo AS tipo
FROM cptransacciondetalle
LEFT JOIN

(SELECT cptransacciondetalle.ttransaccion, ttransaccionreferencia, (CASE
ttipo WHEN 'F' THEN tmonto WHEN 'C' THEN tmonto ELSE (tmonto * -1) END)
AS tmonto FROM cptransacciondetalle
LEFT JOIN cptransaccioncabecera ON cptransacciondetalle.ttransaccion cptransaccioncabecera.ttransaccion WHERE ((ttipo <> 'A' AND tmonto >
0.00) OR (ttipo = 'A' AND tmonto < 0.00)) AND
cptransaccioncabecera.tproveedor = '434') AS cptransaccion

ON cptransacciondetalle.ttransaccionreferencia cptransaccion.ttransaccionreferencia
LEFT JOIN cptransaccioncabecera ON cptransacciondetalle.ttransaccion cptransaccioncabecera.ttransaccion
WHERE cptransaccioncabecera.tproveedor = '434' AND ttipo = 'F') AS
transaccion


GROUP BY transaccion, fecha, documento, concepto, cuenta, seleccion
HAVING SUM(monto) <> 0.00
ORDER BY transaccion

Resultado de la consulta completa:
0 F20040000897 14/06/2004 82412 126425.60
0 F20040001091 23/06/2004 81281 189638.40

Aquí el monto de F20040000897 debe ser 63212.80

Resultado de la consulta segunda con la tercera:
0 F20040000897 14/06/2004 82412 -63212.80 F
0 F20040000897 14/06/2004 82412 20318.40 F
0 F20040000897 14/06/2004 82412 169320.00 F
0 F20040000897 14/06/2004 82412 -63212.80 F
0 F20040000897 14/06/2004 82412 -63212.80 F
0 F20040000897 14/06/2004 82412 20318.40 F
0 F20040000897 14/06/2004 82412 169320.00 F
0 F20040000897 14/06/2004 82412 -63212.80 F
0 F20040001091 23/06/2004 81281 20318.40 F
0 F20040001091 23/06/2004 81281 169320.00 F
0 F20040001091 23/06/2004 81281 20318.40 F
0 F20040001091 23/06/2004 81281 169320.00 F


Resultado de la consulta segunda:
P20040000396 F20040000897 -63212.80
F20040000897 F20040000897 20318.40
F20040000897 F20040000897 169320.00
P20040000395 F20040000897 -63212.80
F20040001091 F20040001091 20318.40
F20040001091 F20040001091 169320.00



Lo que sucede es que la combinación del segundo SELECT con el tercero
están duplicando las lineas y el resultado en el SUM(DISTINCT monto) del
primer SELECT lo muestra erróneo en algunos casos. Quiero aclarar que el
resultado en el segundo SELECT me devuelve las líneas correctas.
Por favor si me pueden ayudar a evitar que esto suceda se lo agradeceré.

Pedro Pérez
 

Leer las respuestas

#1 Pedro Pérez
08/07/2004 - 22:28 | Informe spam
Quiero aclarar que el
resultado en el segundo SELECT me devuelve las líneas correctas.



Una nota es que no es el segundo que da los resultados bien sino el tercero.

"Pedro Pérez" wrote in message
news:
Amigos:

Vamos a ver si me entienden con esta situación en una consulta que se me
ha presentado. Tengo el siguiente query:


SELECT seleccion, transaccion, fecha, documento, concepto, cuenta,
SUM(DISTINCT monto) AS monto FROM


(SELECT 0 AS seleccion, cptransaccioncabecera.ttransaccion AS transaccion,
CONVERT(char(10), cptransaccioncabecera.tfecha, 103) AS fecha,
tdocumento AS documento,
cptransaccioncabecera.tconcepto AS concepto, '' AS cuenta,
cptransaccion.tmonto AS monto, ttipo AS tipo
FROM cptransacciondetalle
LEFT JOIN

(SELECT cptransacciondetalle.ttransaccion, ttransaccionreferencia, (CASE
ttipo WHEN 'F' THEN tmonto WHEN 'C' THEN tmonto ELSE (tmonto * -1) END)
AS tmonto FROM cptransacciondetalle
LEFT JOIN cptransaccioncabecera ON cptransacciondetalle.ttransaccion > cptransaccioncabecera.ttransaccion WHERE ((ttipo <> 'A' AND tmonto >
0.00) OR (ttipo = 'A' AND tmonto < 0.00)) AND
cptransaccioncabecera.tproveedor = '434') AS cptransaccion

ON cptransacciondetalle.ttransaccionreferencia > cptransaccion.ttransaccionreferencia
LEFT JOIN cptransaccioncabecera ON cptransacciondetalle.ttransaccion > cptransaccioncabecera.ttransaccion
WHERE cptransaccioncabecera.tproveedor = '434' AND ttipo = 'F') AS
transaccion


GROUP BY transaccion, fecha, documento, concepto, cuenta, seleccion
HAVING SUM(monto) <> 0.00
ORDER BY transaccion

Resultado de la consulta completa:
0 F20040000897 14/06/2004 82412 126425.60
0 F20040001091 23/06/2004 81281 189638.40

Aquí el monto de F20040000897 debe ser 63212.80

Resultado de la consulta segunda con la tercera:
0 F20040000897 14/06/2004 82412 -63212.80 F
0 F20040000897 14/06/2004 82412 20318.40 F
0 F20040000897 14/06/2004 82412 169320.00 F
0 F20040000897 14/06/2004 82412 -63212.80 F
0 F20040000897 14/06/2004 82412 -63212.80 F
0 F20040000897 14/06/2004 82412 20318.40 F
0 F20040000897 14/06/2004 82412 169320.00 F
0 F20040000897 14/06/2004 82412 -63212.80 F
0 F20040001091 23/06/2004 81281 20318.40 F
0 F20040001091 23/06/2004 81281 169320.00 F
0 F20040001091 23/06/2004 81281 20318.40 F
0 F20040001091 23/06/2004 81281 169320.00 F


Resultado de la consulta segunda:
P20040000396 F20040000897 -63212.80
F20040000897 F20040000897 20318.40
F20040000897 F20040000897 169320.00
P20040000395 F20040000897 -63212.80
F20040001091 F20040001091 20318.40
F20040001091 F20040001091 169320.00



Lo que sucede es que la combinación del segundo SELECT con el tercero
están duplicando las lineas y el resultado en el SUM(DISTINCT monto) del
primer SELECT lo muestra erróneo en algunos casos. Quiero aclarar que el
resultado en el segundo SELECT me devuelve las líneas correctas.
Por favor si me pueden ayudar a evitar que esto suceda se lo agradeceré.

Pedro Pérez


Preguntas similares