Me estoy rompiendo la cabeza intentando resolver este problema. tengo este código:
Código Java:
Dejo la primera forma comentada (que si funciona pero no arroja los datos que necesito) y la segunda (no funciona pero ejecuto la consulta genera en el log y si arroja los datos que necesito).Ver original
// sql = "select p.igr_id,a.al_id,a.ubi_id,p.pro_itemname,pro_itemcode,p.pro_unidad,pro_color,d.deta_id,d.deta_cantidadsolicitada, \n" + // "p.pro_descripcion, p.pro_genero, p.pro_talla, p.pro_logo,p.pro_material,p.pro_vidautil,a.al_cantidad,a.al_costo,tr.trp_nombre,\n" + // "case when exists \n" + // "(select * from tab_detalleasignacion di \n" + // "join tab_solicitud si on si.sol_id = di.sol_id \n" + // "join tab_almacen ai on ai.al_id = di.al_id join tab_producto pin on pin.pro_id = ai.pro_id\n" + // "where pin.igr_id = p.igr_id and si.usu_idempleado = "+usu_id+" and di.deta_estadoprenda = 1 and not exists (\n" + // " select * from tab_detalleasignacion d2 \n" + // " join tab_solicitud s2 on s2.sol_id = d2.sol_id \n" + // " join tab_almacen a2 on a2.al_id = d2.al_id join tab_producto p2 on p2.pro_id = a2.pro_id\n" + // " where p2.igr_id = p.igr_id and s2.usu_idempleado = "+usu_id+" and d2.deta_estadoprenda = 2)\n" + // ") then 1\n" + // "else 0 end restriccion\n" + // "from tab_detalleasignacion d \n" + // "JOIN tab_almacen a on a.al_id = d.al_id \n" + // "JOIN tab_producto p on p.pro_id = a.pro_id\n" + // "JOIN tab_tiporopaprenda tr ON a.trp_id = tr.trp_id\n" + // "JOIN tab_solicitud s on s.sol_id = d.sol_id\n" + // "where d.deta_estadoprenda = 1 AND a.al_estado = 1 and d.sol_id= "+ idsol; sql = "select p.igr_id,a.al_id,a.ubi_id,p.pro_itemname,pro_itemcode,p.pro_unidad,pro_color,d.deta_id,d.deta_cantidadsolicitada, \n" + "p.pro_descripcion, p.pro_genero, p.pro_talla, p.pro_logo,p.pro_material,p.pro_vidautil,a.al_cantidad,a.al_costo,tr.trp_nombre,\n" + "case when \n" + " ((select COUNT(p3.igr_id) total from tab_detalleasignacion d3 join tab_almacen a3 on a3.al_id = d3.al_id join tab_producto p3 on p3.pro_id = a3.pro_id\n" + " join tab_solicitud s3 on d3.sol_id = s3.sol_id join tab_usuariohistorial h3 on h3.ush_id = s3.usu_idempleado \n" + " where s3.usu_idempleado = "+usu_id+" and p3.igr_id = p.igr_id and d3.deta_estadoprenda = 2 group by p3.igr_id) \n" + " < " + " (select rt3.u_cantidad from tab_detalleasignacion d3 join tab_almacen a3 on a3.al_id = d3.al_id join tab_producto p3 on p3.pro_id = a3.pro_id\n" + " join tab_solicitud s3 on d3.sol_id = s3.sol_id join tab_usuariohistorial h3 on h3.ush_id = s3.usu_idempleado \n" + " join tab_areatrabajocargo at3 on at3.car_id = h3.car_id\n" + " join tab_ropatrabajo rt3 on rt3.tpe_id = at3.tpe_id and rt3.u_item = p3.pro_itemcode\n" + " where s3.usu_idempleado = "+usu_id+" and p3.igr_id = p.igr_id and d3.deta_estadoprenda = 2))\n" + "then 1" + "else " + " case when exists \n" + " (select * from tab_detalleasignacion di \n" + " join tab_solicitud si on si.sol_id = di.sol_id \n" + " join tab_almacen ai on ai.al_id = di.al_id join tab_producto pin on pin.pro_id = ai.pro_id\n" + " where pin.igr_id = p.igr_id and si.usu_idempleado = "+usu_id+" and di.deta_estadoprenda = 1 and not exists (\n" + " select * from tab_detalleasignacion d2 \n" + " join tab_solicitud s2 on s2.sol_id = d2.sol_id \n" + " join tab_almacen a2 on a2.al_id = d2.al_id join tab_producto p2 on p2.pro_id = a2.pro_id\n" + " where p2.igr_id = p.igr_id and s2.usu_idempleado = "+usu_id+" and d2.deta_estadoprenda = 2)\n" + " ) then 1\n" + " else 0\n" + " end\n" + "end restrinccion\n" + "from tab_detalleasignacion d \n" + "JOIN tab_almacen a on a.al_id = d.al_id \n" + "JOIN tab_producto p on p.pro_id = a.pro_id\n" + "JOIN tab_tiporopaprenda tr ON a.trp_id = tr.trp_id\n" + "JOIN tab_solicitud s on s.sol_id = d.sol_id\n" + "where d.deta_estadoprenda = 1 AND a.al_estado = 1 and d.sol_id= "+idsol; logger.info("despues de asignar: "+sql); st = pst.executeQuery();
Si copio la consulta de la segunda forma al sqlserver y lo ejecuto SI FUNCIONA, pero en JAVA (trabajo con JSF) me dice que no existen registros. Los campos enviados son identicos entre la primera y la segunda forma. Por que la segunda forma no funciona.
AYUDA POR FAVOR