Consulta en Suma de columnas con HQL

117 views
Skip to first unread message

Anthony Campos

unread,
Apr 13, 2009, 4:35:34 PM4/13/09
to NHibernat...@googlegroups.com
Buenas tardes :

Mas que todo es una consulta, derrepente este haciendo algo mal en mi select y lo q queiro es sumar varias columnas y obtener un unico resultado, a mi parecer esta correcta la sentencia pero el nhibernate me sale un error y me dice :

',' expected in SELECT before:+ [select m.Poliza.Bvl  + m.Poliza.Fondo  + m.Poliza.Cavali  + m.Poliza.FondoCav + m.Poliza.Conasev  + m.Poliza.Sab + m.Poliza.Igv + m.Poliza.IgvCavali   as total,m.Poliza.NumeroPoliza  from  SivNet.Entidades.MovimientoCliente m  where m.Poliza = :num And (m.Estado.Codigo <> 'A' and m.Estado.Codigo <> 'D' ) And m.Poliza.Estado='D'   Order by m.FechaVencimiento Asc ]


Mi select es este :
"select (m.Poliza.Bvl  + m.Poliza.Fondo  + m.Poliza.Cavali  + m.Poliza.FondoCav + m.Poliza.Conasev  + m.Poliza.Sab + m.Poliza.Igv + m.Poliza.IgvCavali )  as total,m.Poliza.NumeroPoliza  from  MovimientoCliente m  where m.Poliza = :num And (m.Estado.Codigo <> 'A' and m.Estado.Codigo <> 'D' ) And m.Poliza.Estado='D'   Order by m.FechaVencimiento Asc "

Estuve bsucando si el Hql permite estas consdiciones pero no encontre ojala q se pueda ...

Gracias pro su ayuda...

Diego Jancic

unread,
Apr 14, 2009, 9:05:40 AM4/14/09
to NHibernat...@googlegroups.com
Seguro que si usas concat(x, y) te va a andar... el tema es que es
medio incomodo.
Tambien, segun la doc deberias poder concatenar asi: "x || y", pero no
estoy del todo seguro que ande.

Saludos

2009/4/13 Anthony Campos <stri...@gmail.com>:

Fabio Maulo

unread,
Apr 14, 2009, 11:22:03 AM4/14/09
to NHibernat...@googlegroups.com
HQL todavía no suporta alias en el select.
Meté toda la operación en un cast y usá un ResultsTrasformer o un "select new"

select new TuCosa(cast(a.Fondo+a.Imposta as Double), m.Poliza) from Algo a
--
Fabio Maulo

Anthony Campos

unread,
Apr 14, 2009, 1:12:38 PM4/14/09
to NHibernat...@googlegroups.com
Fabio Maulo escribió:
Hola Fabio :

mm la manera de sumar varios campos seria la misma ?

select new TuCosa(cast(a.Fondo+a.Imposta   +  a.campo1 + a.campo2 + a.campo3  as Double), m.Poliza) from Algo a

o no es posible eso tambien??  asi tambien se puede utilizar con las restas, multiplicaciones y divisiones ???

Gracias por la ayuda..

Anthony

Fabio Maulo

unread,
Apr 14, 2009, 1:41:53 PM4/14/09
to NHibernat...@googlegroups.com
Pregutas porque tuviste algún problema con eso ?
--
Fabio Maulo

Anthony Campos

unread,
Apr 14, 2009, 1:46:49 PM4/14/09
to NHibernat...@googlegroups.com
Fabio Maulo escribió:
Si bueno lo q pasa es q los campos con las separacioens de las +  , las obtengop de la bd ya q es una formula, y armo el select pero no me reconoce lo de las sumas, creo que en donde pones TUCOSA esa una palabra cualqueira no ? ademas dime si es q aparte de esa pequeña formula de sumas, le adicionaria un dato mas a obtener le deberia poner dentro de TUCOSA(cast(a.Fondo+a.Imposta   +  a.campo1 + a.campo2 + a.campo3  as Double) , AQUI )  o , AQUI  ? seguro estyo haciendo algo mal por eso me sale error, es la primera vez q hago esto de sumas asi por select ya que como lo quieren hacer todo por formulas tengo que adecuarlo.

Gracias por tu respuesta, Saludos.

Anthony

Fabio Maulo

unread,
Apr 14, 2009, 2:52:18 PM4/14/09
to NHibernat...@googlegroups.com
No entendí...
Hablas de "campos"... se trata de una HQL o de una SQL ?

Sobre lo ultimo te digo solo que hacer ejecutar una suma al RDBMS es muy poco escalable/eficiente (de server de base hay uno, de server WEB hay mas de uno y ni hablar si se trata de una applicación windows).

--
Fabio Maulo

Anthony Campos

unread,
Apr 14, 2009, 3:32:03 PM4/14/09
to NHibernat...@googlegroups.com
Fabio Maulo escribió:
bueno es un hql , y lka aplicacion es windows, como te indicaba los datos a sumar se obtiene a travez de una formula que se tiene registrrado en la bd, lo que hago es jalarme esa formula que ya tiene armado que datos se van a sumar o mejor dicho si se tratara de sql  que campos o columnas se van aa sumar, no se si me entiendas ?....
la idea es poder sumar esto que te indico asi sean 2 o mas columnas, asi tambien no solo poder hacer sumas sino las demas operaciones como resta,multiplicacion y division.

ojala que esto se pueda hacer con HQL, no quiero usar sql porque no quiero limitar a  ese lenguaje.

Gracias, Saludos.

Anthony

JoseFR

unread,
Apr 15, 2009, 8:13:47 AM4/15/09
to NHibernate-Hispano
Anthony, algunas otras alternativas:

1- Tener una propiedad en la clase Poliza readonly que devuelva una
suma de las propiedades.
2- Que la clase "MovimientoCliente" o "Poliza" tengan una propiedad
que en el mapeo este resuelto atraves de una formula.


Por supuesto habría que ver el dominio.



On Apr 14, 4:32 pm, Anthony Campos <strike...@gmail.com> wrote:
> Fabio Maulo escribió:No entendí...Hablas de "campos"... se trata de una HQL o de una SQL ?
>
>
>
> Sobre lo ultimo te digo solo que hacer ejecutar una suma al RDBMS es muy poco escalable/eficiente (de server de base hay uno, de server WEB hay mas de uno y ni hablar si se trata de una applicación windows).
> --
> Fabio Maulobueno es un hql , y lka aplicacion es windows, como te indicaba los datos a sumar se obtiene a travez de una formula que se tiene registrrado en la bd, lo que hago es jalarme esa formula que ya tiene armado que datos se van a sumar o mejor dicho si se tratara de sql  que campos o columnas se van aa sumar, no se si me entiendas ?....

Anthony Campos

unread,
Apr 17, 2009, 9:23:31 PM4/17/09
to NHibernat...@googlegroups.com
JoseFR escribió:
Hola jose:

Gracias si podria hacerlo asi, tambien lo habia pensado, pero el pequeño detalle es que esas sumas o segun sea la operacion que se desee hacer es parametrico, y no lo podria hacer fijo es ese motivo a lo que comence a hacer estas consultas, pero bueno hasta que pueda investigar bien el como se podria hacer usando sentencia HQL con operaciones matematicas, he optado por hacerme un procedimiento que interpreta las formulas y obtener resultados segun lo que se desee obtener( sumas,resta,multiplicacion,divisiones, etc).

Gracias por la ayuda me sirvio de mucho ....

Anthony.

Carlos Peix

unread,
Apr 19, 2009, 10:29:50 PM4/19/09
to NHibernat...@googlegroups.com
Hola Anthony,

Si la operacion es parametrica, optando por resolverlo en la base de
datos (aunque lo escribas en HQL) te hace mas facil el primer paso,
como mucho el segundo, pero te va a complicar mucho los siguientes,
cuando tengas que hacer calculos mas complicados.

Para resolverlo en codigo, te sugiero que mires el patron Strategy.


2009/4/17 Anthony Campos <stri...@gmail.com>:


> Gracias si podria hacerlo asi, tambien lo habia pensado, pero el pequeño
> detalle es que esas sumas o segun sea la operacion que se desee hacer es
> parametrico, y no lo podria hacer fijo es ese motivo a lo que comence a
> hacer estas consultas, pero bueno hasta que pueda investigar bien el como se
> podria hacer usando sentencia HQL con operaciones matematicas, he optado por
> hacerme un procedimiento que interpreta las formulas y obtener resultados
> segun lo que se desee obtener( sumas,resta,multiplicacion,divisiones, etc).

--
Carlos Peix
carlo...@gmail.com
cel: 15-4406-7571

Reply all
Reply to author
Forward
0 new messages