algun tips. de como hacer esto

11/06/2005 - 21:25 por Javier | Informe spam
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

Preguntas similare

Leer las respuestas

#1 Maxi
12/06/2005 - 17:07 | Informe spam
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:
mail: Maxi.da[arroba]gmail.com

"Javier" escribió en el mensaje
news:
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

Respuesta Responder a este mensaje
#2 Javier
14/06/2005 - 21:33 | Informe spam
Gracias Maxi,
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:
mail: Maxi.da[arroba]gmail.com

"Javier" escribió en el mensaje
news:
> 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
>



email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida