Gracias Maxi,
Disculpa pero no habia podido conectame y no vi atiempo tu respuesta
el problema es que necesito totalizar y hacer la conversion del valor pero
el campo codmoneda, f_mov (fecha) , tasa no forma parte de la expresion
group by por lo tanto SQL genera error aver te lo puedo ilustrar :
salida a devolver por la BD.
PERIODO VALOR DESCUENTO IMPUESTO
2001 1000.00 0 10
2002 9000.00 0 40
Lo que ocurre es que los valores del ano esta compuesto transacc. en
difentes monedas y la moneda no forma parte de la agrupacion pero para
calcular el valor de cada transaccion a la moneda que se se desea optener es
necesario pasarle a la funcion moneda, tasa y fecha. los cuales no forma
parte de la agrupacion que es lo que no se puede en SQL.
algo mas simple pero que presenta el mismo problema seria
select valor = case when origen='D' THEN sum(valor) ELSE SUM(VALOR)*-1 END
FROM VENTAS
observa que la columna origen no esta agregada en la agrupacion pero lo que
necesito es obtener el total del campo "VALOR" , esto genera error, imaginate
que para obtener el resultado del campo valor debo pasar varios paramentros a
una funcion cuyo paramentros no forma parte ni de la salida del select ni de
la condidcion de agrupacion entonce que otro mecanismo puedo usar para que
sea la base de datos que devuelva el select ya agrupado en una presentacion
similar a la anterior.
Javier
"Maxi" wrote:
Hola Javier, pero si haces un solo SUM la cosa cambia, o sea:
CASE WHEN V.CODMONEDA='US$' THEN
sum(valor-(v.val_itbis)*v.itbis_inclu)*d.signo) else
El ELse que pusiste no lo comprendo por esto:
else
DBO.SFFMONEDATO(v.codmoneda ,
(sum(valor)-sum(v.val_itbis)*v.itbis_inclu)*d.signo, v.f_mov, v.tasa,'US')
Como pensas que va a sumar?
Maxi - Buenos Aires - Argentina
Desarrollador 3 Estrellas
Msn_messager: Maxi_adrogue@msn.com
mail: Maxi.da[arroba]gmail.com
"Javier" <Javier@discussions.microsoft.com> escribió en el mensaje
news:43EEA304-14C8-4128-B8A7-73D8868AB466@microsoft.com...
> Hola !
> necesito hacer un select en el que usando algunos campos para evaluacion
> mas
> no me interesa que sea parte de la salida pero dada la restriccion de que
> todo campo debe formar parte del group by ya sabran que genera error el
> proposito es generar un query sumarizado por periodo que debe identificar
> si
> el valor debe ser convertido a la moneda especificada en este caso 'US$'
>
> En sintesis el asunto es es que para pasar los parametros a la funcion
> de
> conversion se deben indentificar ciertos valores que no deben formar parte
> de
> la agrupacion.
>
> Algun consejo? por favor
>
> Gracias por su coolaboracion
>
> Javier
>
> select v.codempresa ,v.ano as periodo,
> valor ÊSE WHEN V.CODMONEDA='US$' THEN
> (sum(valor)-sum(v.val_itbis)*v.itbis_inclu)*d.signo else
> DBO.SFFMONEDATO(v.codmoneda ,
> (sum(valor)-sum(v.val_itbis)*v.itbis_inclu)*d.signo, v.f_mov, v.tasa,'US')
> END,
> descuento = CASE WHEN V.CODMONEDA='US$' THEN sum(v.descuento)*d.signo
> else
> DBO.SFFMONEDATO(v.codmoneda, sum(v.descuento)*d.signo, v.f_mov,
> v.tasa,'US$') end,
> val_itbis ÊSE WHEN V.CODMONEDA='US$' THEN sum(v.val_itbis)*d.signo
> else
> DBO.SFFMONEDATO(v.codmoneda , sum(val_itbis)*d.signo, v.f_mov,
> v.tasa,'US$')
> end
> FROM ventas v LEFT OUTER JOIN documen d ON v.coddoc = d.coddoc
> LEFT OUTER JOIN clientes a ON v.codclte = a.codclte
> where v.codempresa in ('','01','02')
> and v.f_mov >='2005/06/10' and v.f_mov <= '2005/06/11' and v.tipo_trans > > 'A'
> AND d.es_venta=1 AND d.origen in ('D','C')
> group by v.codempresa,d.signo,v.itbis_inclu, v.ano order by v.codempresa,
> v.ano
>
Leer las respuestas