Maxi - explicacion

15/06/2005 - 19:22 por Javier | Informe spam
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

#1 Maxi
16/06/2005 - 01:51 | Informe spam
Hola Javier, antes que nada: No te recomiendo que hagas una pregunta a un
foro personalizada ya que te puedes perder la ayuda de otros miembros del
mismo :(
Ahora voy a ver si te comprendi, porque me costo un poquito :-S

select valor = case when origen='D' THEN sum(valor) ELSE SUM(VALOR)*-1
END
FROM VENTAS




No seria mejor hacelo asi:

select valor = sum(case when origen='D' THEN valor ELSE VALOR)*-1 END) as
valor
FROM VENTAS

Esto es lo que buscas?


Maxi - Buenos Aires - Argentina
Desarrollador 3 Estrellas

Msn_messager:
mail: Maxi.da[arroba]gmail.com

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





Preguntas similares