Hola Chema: Gracias por contestar, eso sería factible si no fuera porque :W-HORAINI es una tabla con un monton de elementos y hay otras dos tablas mas con el mismo caso. Ya hay montados 4 cursores para selecciones pero si no puedo condicionar las sentencias WHERE las combinaciones serían.... decenas!
Si no se puede hacer (yo no he encontrado el modo) tendré que utilizar un fichero temporal para ordenar los registros ssegún el nuevo criterio. Muchas gracias. Un saludo. Juanra El 12 de enero de 2016, 16:39, Chema Bueno <[email protected]> escribió: > Hola, > > > > Yo haría dos sentencias SQL completas y el WHERE lo > pondría fuera. Algo así: > > > > if :w-horaini1 <> " " > > EXEC SQL > DECLARE CUR5 CURSOR FOR > SELECT B.PTOSERV, B.NPEDWEB, B.RUTA > FROM FSPEDC3 A > LEFT JOIN FPEDHIPC5 B > ON A.NPEDWEB = B.NPEDWEB > WHERE B.FECENT = :W-FECHA > > AND B.HINIENT = :W-HORAINI1 > > AND B.CODEST IN ("20", "25", "27") > ORDER BY A.CCIRCOD, B.HINIENT, B.RUTA, B.NPEDWEB > END-EXEC. > > end-if > > if :w-horaini2 <> " " > > EXEC SQL > DECLARE CUR5 CURSOR FOR > SELECT B.PTOSERV, B.NPEDWEB, B.RUTA > FROM FSPEDC3 A > LEFT JOIN FPEDHIPC5 B > ON A.NPEDWEB = B.NPEDWEB > WHERE B.FECENT = :W-FECHA > > AND B.HINIENT = :W-HORAINI2 > > AND B.CODEST IN ("20", "25", "27") > ORDER BY A.CCIRCOD, B.HINIENT, B.RUTA, B.NPEDWEB > END-EXEC. > > end-if > > > > > > Un saludo y espero que funcione. > > > > > > *De:* [email protected] [mailto: > [email protected]] *En nombre de *Juan Ramón Garcia > *Enviado el:* martes, 12 de enero de 2016 16:04 > *Para:* forum.help400 > *Asunto:* COBOL y SQL embebido IF dentro de WHERE > > > > Hola a tod@s: > > Nunca me he encontrado con este problema pero...siempre hay una primera > vez. > > En un programa COBOL complicadísimo se utiliza SQL embebido para > seleccionar una serie de registros cuyas características han sido > seleccionadas por el usuario mediante una pantalla de opciones. > > El caso es que quieren cambiar el orden de impresión de los registros > pero, tal y como está el programa, habría que rehacerlo y utilizar un > fichero temporal cosa que prefieren que no se haga. > > La solución que se me ha ocurrido es condicionar algunas opciones del > WHERE a si tiene o no tiene datos el campo correspondiente. > > Una imagen vale más que mil palabras: > > EXEC SQL > DECLARE CUR5 CURSOR FOR > SELECT B.PTOSERV, B.NPEDWEB, B.RUTA > FROM FSPEDC3 A > LEFT JOIN FPEDHIPC5 B > ON A.NPEDWEB = B.NPEDWEB > WHERE B.FECENT = :W-FECHA > AND B.HINIENT = :W-HORAINI > AND B.CODEST IN ("20", "25", "27") > ORDER BY A.CCIRCOD, B.HINIENT, B.RUTA, B.NPEDWEB > END-EXEC. > > lo que necesitaría seria algo como esto: (lo escribo en minúsculas para > que se distinga > > EXEC SQL > DECLARE CUR5 CURSOR FOR > SELECT B.PTOSERV, B.NPEDWEB, B.RUTA > FROM FSPEDC3 A > LEFT JOIN FPEDHIPC5 B > ON A.NPEDWEB = B.NPEDWEB > WHERE B.FECENT = :W-FECHA > > if :w-horaini1 <> " " > > AND B.HINIENT = :W-HORAINI1 > > end-if > > if :w-horaini2 <> " " > > AND B.HINIENT = :W-HORAINI2 > > end-if > > AND B.CODEST IN ("20", "25", "27") > ORDER BY A.CCIRCOD, B.HINIENT, B.RUTA, B.NPEDWEB > END-EXEC. > > > > Evidentemente no funciona y he probado con CASE y otras "cosas" que he > encontrado por ahí pero no lo consigo y esto simplificaría mi problema. > > ¿Hay alguna forma de condicionar las sentencias del WHERE? > > Un saludo. > > > > Juanra > > SqlCobolSaurio > > > > > > > > > > Advertencia Legal Este mensaje, y en su caso, cualquier fichero anexo al > mismo, puede contener informacion confidencial, siendo para uso exclusivo > del destinatario, quedando prohibida su divulgacion copia o distribucion a > terceros sin la autorizacion expresa del remitente. Si Vd. ha recibido este > mensaje por error, le rogamos lo comunique al remitente y borre dicho > mensaje y cualquier documento adjunto que pudiera contener. Gracias por su > colaboracion. > > Legal Advisory This message (including any attachments) may contain > confidential information. It is intended for use by the recipient only. Any > dissemination, copying or distribution to third parties without the express > consent of the sender is strictly prohibited. If you have received this > message in error, please inform the sender and delete the message and > attachments from your system. Thank you for your collaboration. > > ____________________________________________________ > Únete a Recursos AS400, nuestra Comunidad ( http://bit.ly/db68dd ) > Forum.Help400 © Publicaciones Help400, S.L. >
____________________________________________________ Únete a Recursos AS400, nuestra Comunidad ( http://bit.ly/db68dd ) Forum.Help400 © Publicaciones Help400, S.L.

