Uso de where case en una consulta

58 views
Skip to first unread message

francisco f

unread,
Jan 21, 2014, 1:24:16 PM1/21/14
to wavemake...@googlegroups.com
Estoy intentando crear esta consulta

select D.act
from Datos D
where (CASE
WHEN (:nombre is not empty) THEN
 (D.comercial = :nombre)
ELSE 1 END)

group by act


Lo que quiero que haga es que si la variable :nombre no esta vacía la utilice para el filtro y si está vacía
me muestre todos los registros.

pero solo consigo que salga esto:

unexpected AST node: CASE near line 3, column 8 [select D.act from com.ftthcadb.data.Datos D
where (CASE WHEN (:nombre is not empty) THEN (D.comercial = :nombre) ELSE 1 END) group by act

¿Alguna sugerencia?

Oliver Carreño

unread,
Jan 21, 2014, 1:30:03 PM1/21/14
to wavemake...@googlegroups.com
No estoy seguro pero creo que las sentencias CASE no son validas para HQL, te recomiendo que uses LIKE y en el valor por defecto coloques %



Oliver Carreño





--
Has recibido este mensaje porque estás suscrito al grupo "WaveMaker Hispano" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus correos electrónicos, envía un correo electrónico a wavemaker-hisp...@googlegroups.com.
Para publicar una entrada en este grupo, envía un correo electrónico a wavemake...@googlegroups.com.
Visita este grupo en http://groups.google.com/group/wavemaker-hispano.
Para obtener más opciones, visita https://groups.google.com/groups/opt_out.

glp...@gmail.com

unread,
Jan 21, 2014, 2:30:46 PM1/21/14
to wavemake...@googlegroups.com
Si se puede usar CASE en HQL. Lo que desconozco es si la cláusula CASE es válida en el WHERE.

Yo siempre la he usado en el SELECT

SELECT … CASE …


Saludos.


Enviado desde Surface Pro

zaralinux gmail

unread,
Jan 21, 2014, 6:02:24 PM1/21/14
to wavemake...@googlegroups.com
El 21/01/2014 20:30, glp...@gmail.com escribió:
Si se puede usar CASE en HQL. Lo que desconozco es si la cláusula CASE es válida en el WHERE.

Yo siempre la he usado en el SELECT

SELECT … CASE …


Saludos.


Enviado desde Surface Pro

De: Oliver Carreño
Enviado el: ‎martes‎, ‎21‎ de ‎enero‎ de ‎2014 ‎19‎:‎30
Para: wavemake...@googlegroups.com

No estoy seguro pero creo que las sentencias CASE no son validas para HQL, te recomiendo que uses LIKE y en el valor por defecto coloques %



 vi que se podia, no guarde ni los enlaces
Al final hice esto:


select D.act
from Datos D
where
D.comercial LIKE concat('%',:nombre,'%')
group by act

Funciona bien cuando lo pruebo en el diseñador

Creo el servicevariable, en un selectmenu lo asigno como dataset.

El filtro del servicevariable  lo saco de otro selectmenu 2

Si en el selec 2 elijo un nombre el select 1 funciona bien y me muestra
solo el listado perteneciente a ese nombre.
Pero si en el select 2 no elijo nada el select 1 deberia sacar todos, pero no saca nada.

He probado a cambiar el emptyvalue del select 2 a todos los valores posibles y nunca saca todos los registros.

Se aceptan más sugerencias

Gracias

francisco f

unread,
Jan 31, 2014, 8:50:30 AM1/31/14
to wavemake...@googlegroups.com


El martes, 21 de enero de 2014 19:30:03 UTC+1, Oliver Carreño escribió:
No estoy seguro pero creo que las sentencias CASE no son validas para HQL, te recomiendo que uses LIKE y en el valor por defecto coloques %



¿Donde pongo el valor por defecto?  estoy espeso

He probado una expresion para el filtro del servicevariable
if ${filtroacor9.selectedItem.nombre}
{ then
${filtroacor9.selectedItem.nombre}
}else{ "%" }

si el select de filtroacor9 tiene una seleccion entonces le pasa ese mismo dato y si no le pasa el %
pero sin mucho exito

En la propiedad del filtroacor9 emptyValue se deberia poder poner lo que se quiera y no las 4 opciones fijas.

Sigo sin poder listar todos los registros

saludos
Reply all
Reply to author
Forward
0 new messages