我有以下使用Hibernate NamedQuery
TXN_ID END_DATE
---------- ------------
121 15-JUN-16
122 15-JUN-16
123 16-MAY-16
每个行数据都可以存储在Java类Object中。 现在我想根据END_DATE组合数据。如果END_DATE相同,则合并TXN_ID数据。
从上面的数据输出将是:
TXN_ID END_DATE
---------- ------------
121|122 15-JUN-16
123 16-MAY-16
我想在java中执行此程序。什么是简单的程序?
答案 0 :(得分:0)
使用接受的函数printMap,遍历hashmap以查看输出是否正确。
使用以下代码:
public static void main(String[] args) {
String[][] b = {{"1","15-JUN-16"},{"2","16-JUN-16"},{"3","13-JUN-16"},{"4","16-JUN-16"},{"5","17-JUN-16"}};
Map<String, String> mapb = new HashMap<String,String>();
for(int j=0; j<b.length; j++){
String c = mapb.get(b[j][1]);
if(c == null)
mapb.put(b[j][1], b[j][0]);
else
mapb.put(b[j][1], c+" "+b[j][0]);
}
printMap(mapb);
}
您将获得以下输出:
13-JUN-16 = 3
16-JUN-16 = 2 4
17-JUN-16 = 5
15-JUN-16 = 1
我认为这可以解决您的问题。
答案 1 :(得分:0)
使用hibernate,您可以将查询结果放入对象列表
Query q = session.createSQLQuery( sql ).addEntity(ObjDataQuery.class);
List<ObjDataQuery> res = q.list();
现在您可以创建一个hashmap来存储最终结果,以填充此对象,您可以迭代res
Map<String, String> finalResult= new HashMap<>();
for (int i=0; i<res.size(); i++){
if (finalResult.get(res.get(i).date!=null){
//new element
finalResult.put(res.get(i).date,res.get(i).txn)
} else {
//update element
finalResult.put(res.get(i).date,
finalResult.get(res.get(i).date) + res.get(i).txn)
}
}
我没有按逻辑测试它应该是正确的。
另一种方法是更改查询以直接获得最终结果(在oracle中查看LISTAGG)