需求: 要求查詢一個站點在地市和省的排名信息出來。sql
效果圖:session
代碼實現: 註釋的部分是起初採用的hibernate 查詢,但不管怎麼寫都會報 space is not allowed after parameter prefix ':'...... 後來上網查了,有人也遇到過相似問題,給出的解決方法是轉義冒號。 http://blog.csdn.net/woshizhangliang999/article/details/48036407 可是在不知道爲什麼在我裏不起做用。 多是我程序限制??反正不太清楚。 後來沒辦法採用了原始的JDBC 查詢。 在此記錄一下。 代碼以下。app
@Autowired private JdbcTemplate jdbcTemplateLoms;
public List getStationGameSalesRank(String regionCode) { StringBuffer sb = new StringBuffer(); sb.append("select @curRank:=@curRank+1 AS rank, sales.* from (SELECT s.station_id stationId, sum(s.this_year_sale) sales_sum FROM station_game_sales_shanxi s "); // String sql = "select @curRank \\:=@curRank+1 AS rank, sales.* from ( "+ // "SELECT s.station_id stationId, sum(s.this_year_sale) sales_sum FROM station_game_sales_shanxi s "; // if (regionCode != null && !"".equals(regionCode) && !"0".equals(regionCode)) { sb.append("LEFT JOIN station sta on s.station_id = sta.station_id "); sb.append("Where sta.region_code ='"+regionCode+"' "); } sb.append("GROUP BY s.station_id ORDER BY sales_sum DESC ) sales, (SELECT @curRank:=0) q "); List list = null; try{ list = jdbcTemplateLoms.queryForList(sb.toString()); // Session session = (Session) em.getDelegate(); // SQLQuery query = session.createSQLQuery(sql); // if (regionCode != null && !"".equals(regionCode) // && !"0".equals(regionCode)) { // query.setParameter("regionCode", regionCode.trim()); // } // query.setResultTransformer(CriteriaSpecification.ALIAS_TO_ENTITY_MAP); // list = query.list(); }catch(Exception ex){ ex.printStackTrace(); } return list; }