如何从子查询中获取ResultSet的别名?

时间:2015-02-20 08:12:30

标签: java sql jdbc alias resultset

我在获取ResultSet的列名别名时遇到问题。 我创建了一个子查询,我在其中使用了别名函数(SQL中的MAX(...)),但每次执行Statement时,我得到java.sql.SQLException,因为列名无效。我使用当前别名来调用getString - 我的ResultSet函数。

这是我在Eclipse中的SQL语句:

String sql = "SELECT   a.steelgrade, a.prod_order_id, a.prod_order_item_pos, "
                        +"a.prod_order_version, a.strip_thickn_aim, a.strip_width_aim, "
                        +"a.customer, a.order_weight_plan, b.grund_kommlos, b.coil_weight "
                        +"FROM (SELECT   prod_order_id, prod_order_item_pos, "
                          + "MAX (prod_order_version) AS max_version "
                     + "FROM production_order "

在ResultSet中while.next() - 循环:

prod_order_version = AuftraegeProduction.getString("max_version");

这是整个SQL语句(在数据库中工作正常!):

SELECT   a.steelgrade, a.prod_order_id, a.prod_order_item_pos,
     a.prod_order_version, a.strip_thickn_aim, a.strip_width_aim,
     a.customer, a.order_weight_plan, b.grund_kommlos, b.coil_weight
FROM (SELECT   prod_order_id, prod_order_item_pos,
               MAX (prod_order_version) AS max_version
          FROM production_order
GROUP BY prod_order_id, prod_order_item_pos) c
     JOIN
     production_order a
     ON a.prod_order_id = c.prod_order_id
   AND a.prod_order_item_pos = c.prod_order_item_pos
   AND a.prod_order_version = c.max_version
     JOIN pps_plan_slab b
     ON b.prod_order_id = c.prod_order_id
   AND b.prod_order_item_pos = c.prod_order_item_pos
   AND b.prod_order_version = c.max_version
WHERE a.strip_thickn_aim > 1.78
 AND a.strip_thickn_aim < 3.26
 AND a.steelgrade = 'M4R51'
 AND a.prod_order_id NOT BETWEEN '0999551' AND '0999599'
 AND a.strip_width_aim BETWEEN 1126 AND 1166
 AND NVL (a.order_weight_plan, 0) > 0
 AND a.order_weight_plan >= b.coil_weight
ORDER BY prod_order_id ASC

有人有建议吗?

莫里斯

1 个答案:

答案 0 :(得分:0)

使用聚合函数max(),min(),sum(),...时必须使用group by子句。