PDA

Ver la Versión Completa : Problemas con Sentencia SQL


AGAG4
24-04-2006, 21:13:17
Uso Firebird 1.53
Tengo problemas con la siguiente instrucción SQL que me tiene muy preocupado:

SELECT F.VENDEDOR,V.NOMVEN,COALESCE(SUM(F.IMPORFAC),0)-
((SELECT COALESCE(SUM(I.IMPMOV-I.IVAFAC),0) FROM TCXC_CLIMOVIM I
WHERE (I.TIPOMOV='NX') AND
I.FACTURA = F.TIPOMOV||F.FOLIOFISCAL AND
I.FECHAMOV BETWEEN '01.02.2006' AND '28.02.2006' AND
I.VENDEDOR = F.VENDEDOR)) TOTAL
FROM TFAC_FACTURAS F
JOIN TFAC_VENDEDORES V ON (V.CLAVEN = F.VENDEDOR)
WHERE F.TIPOMOV='XX' AND
F.FECHAFAC BETWEEN '01.02.2006' AND '28.02.2006' AND
F.DESGLODOC = 1 AND (F.TASAIVA = 1 OR F.TASAIVA = 3)
GROUP BY F.VENDEDOR,V.NOMVEN
ORDER BY 3 DESC

El problema es con la instrucción que esta en NEGRITA, estoy comparando el campo F.TIPOMOVy F.FOLIOFISCAL que no estoy señalando en el Select Maestro es decir arriba F.VENDEDOR,V.NOMVEN,COALESCE(SUM(F.IMPORFAC),0)- por lo que me marca el error:

Invalid expression in the Select list (not contained in either an aggregate function or the GROUP BY clause).

Hay alguna forma de tomar campos que no se señalan en un Select Maestro ?????

Lo que no quiero es Señalar ese campo en el Select Maestro porque lo que ocupo son concentrados( Sumas ) entre campos.

Espero me haya entendido si no, me dicen por favor....

mayte mtz
24-04-2006, 21:42:39
Incluye la funcion Max(campo que no estas incluyendo en el Select maestro) y ya no te marcara el error.

Lo que se hace aquí es decir que te dé el valor máximo que se encuentre en los posibles valores que tenga el campo.

Espero te ayude...

AGAG4
24-04-2006, 23:38:21
Hay un gran problema, con este campo F.FOLIOFISCAL por Cada Registro que se encuentre en el maestro tiene que estar en el SubSelect, este campo es de tipo entero, aparte ya hice la prueba y marca el mismo error, quedo así:

SELECT F.VENDEDOR,V.NOMVEN,MAX(F.FOLIOFISCAL),COALESCE(SUM(F.IMPORFAC),0)-
((SELECT COALESCE(SUM(I.IMPMOV-I.IVAFAC),0) FROM TCXC_CLIMOVIM I
WHERE (I.TIPOMOV='NX') AND
I.FACTURA = 'FP'||F.FOLIOFISCAL AND
I.FECHAMOV BETWEEN '01.02.2006' AND '28.02.2006' AND I.VENDEDOR = F.VENDEDOR)) TOTALFROM TFAC_FACTURAS F
JOIN TFAC_VENDEDORES V ON (V.CLAVEN = F.VENDEDOR)
WHERE F.TIPOMOV='XX' AND
F.FECHAFAC BETWEEN '01.02.2006' AND '28.02.2006' AND
F.DESGLODOC = 1 AND (F.TASAIVA = 1 OR F.TASAIVA = 3)
GROUP BY F.VENDEDOR,V.NOMVEN
ORDER BY 3 DESC


Gracias por su respuesta.

mayte mtz
25-04-2006, 16:46:32
Me referia a colocar el Max en la subconsulta
algo asÍ:

SELECT F.VENDEDOR, V.NOMVEN,COALESCE(SUM(F.IMPORFAC),0)- (( SELECT COALESCE(SUM(I.IMPMOV-I.IVAFAC),0) FROM TCXC_CLIMOVIM I WHERE (I.TIPOMOV='NX') AND I.FACTURA = MAX(F.TIPOMOV)||MAX(F.FOLIOFISCAL) AND I.FECHAMOV BETWEEN '01.02.2006' AND '28.02.2006' AND I.VENDEDOR = F.VENDEDOR)) TOTALFROM TFAC_FACTURAS FJOIN TFAC_VENDEDORES V ON (V.CLAVEN = F.VENDEDOR)WHERE F.TIPOMOV='XX' AND F.FECHAFAC BETWEEN '01.02.2006' AND '28.02.2006' AND F.DESGLODOC = 1 AND (F.TASAIVA = 1 OR F.TASAIVA = 3)GROUP BY F.VENDEDOR,V.NOMVENORDER BY 3 DESC

Ojalá te ayude

AGAG4
26-04-2006, 03:11:57
No me quedo otra de agregar un Join, tarda un poco más pero hace lo que quiero:

SELECT COALESCE(SUM(C.IMPMOV),0)-COALESCE(SUM(C.IVAFAC),0) FROM TCXC_CLIMOVIM C
INNER JOIN TFAC_FACTURAS F1 ON (SUBSTRING(C.FACTURA FROM 1 FOR 2) = F1.TIPOMOV AND CAST(SUBSTRING(C.FACTURA FROM 3 FOR 6) AS INTEGER) = F1.FOLIOFISCAL)
WHERE (C.TIPOMOV='NP' OR C.TIPOMOV='NX') AND
F1.CREDCON = 2 AND
C.VENDEDOR = F.VENDEDOR AND
C.FECHAMOV BETWEEN '01.02.2006' AND '28.02.2006'


Gracias por su Respuestas.