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
>


Preguntas similare

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
>





Respuesta Responder a este mensaje
#2 Javier
18/06/2005 - 21:30 | Informe spam
Disculpa la ignorancia por lo de la pregunta dirigida a ti.
y gracias por ambas cosas la solucion y el consejo. al poner la expresion
dentro del sum() no genera el error.

Javier Santos

"Maxi" wrote:

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
>> >
>>
>>
>



Respuesta Responder a este mensaje
#3 Maxi
18/06/2005 - 21:35 | Informe spam
:-)


Maxi - Buenos Aires - Argentina
Desarrollador 3 Estrellas

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

"Javier" escribió en el mensaje
news:
Disculpa la ignorancia por lo de la pregunta dirigida a ti.
y gracias por ambas cosas la solucion y el consejo. al poner la expresion
dentro del sum() no genera el error.

Javier Santos

"Maxi" wrote:

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
>> >
>>
>>
>



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