遍历列表以查找对象是否相等

时间:2018-08-28 18:59:23

标签: java sql oracle collections java-8

我有一个如下所示的结果集,该结果集是使用Left join和其他条件返回的。

ID1 - table1 (unique)
ID2 - table2 (unique)
type - table2 
AMt3 - table2

我的最终结果集为:

ID1       ID2   Type    AMT

1835748   21987   9     4

1835748   12898   26    5

1835748   21986   26    5

2242186   21421   1    11

2242186   21422   1    20

2242186   21988   1    30

现在我已经查看了这些数据,并总结了类型和ID1相同的数量。

在上面的示例中 第1行-保持不变 第2 + 3行-总和相加并返回 第4 + 5 + 6行-返回总和

所以最终我只有3条记录需要发送到另一个系统。

是否可以使用查询来实现?到目前为止,我已经给出了简单的表示形式,查询更为复杂。

或者这可以通过Java代码完成吗? 我该如何实现?

2 个答案:

答案 0 :(得分:0)

您可以在SQL中完成此操作。使用GROUP BYMAX()

SELECT T1.ID1,
       T2.TYPE,
       MAX(T2.ID2) ID2,
       SUM(T2.AMT) AMT
       FROM <your join>
       GROUP BY T1.ID1,
                T2.TYPE;

用加入操作替换<your join>。如果您不喜欢MAX(),而不喜欢最大的MIN(),可以将ID2更改为{{1}}。或全部遗漏。

答案 1 :(得分:0)

谢谢麦克斯!可行!

您可以在SQL中完成此操作。使用GROUP BY和MAX()。

选择T1.ID1,        T2.TYPE,        MAX(T2.ID2)ID2,        SUM(T2.AMT)AMT        从        T1.ID1分组,                 T2.TYPE; 用您的加入操作替换。如果您希望最小的ID2,而不是最大的ID2,则可以将MAX()更改为MIN()。或全部遗漏。