0

我目前正在尝试创建一个 java 程序:

  1. 从 Oracle sql 数据库中检索数据(String 和 BigDecimal 值)并将它们放入 resultSet
  2. 显示每一行
  3. 在每个组的末尾添加一个“总计”部分,除以 3 列字符串值。

我在使用 No.3 时遇到问题 - 我不确定如何根据另一列的变化来计算总数。

充实No.3... 有7列,1~3个String code,分别是department、store、region的ID(String);4 是个人的 ID(字符串);5~7 三种不同支付工资、加班费和调整后的总工资 (BigDecimal) 的值。我需要将每个部门、商店和地区的总数加起来并显示它们的变化(随着它们每个人的字符串值的变化):例如,程序将按顺序显示每一行个人,然后显示部门的部门代码更改时的总计。当部门和商店都发生变化时,将显示这两个总数,一个接一个。

我曾考虑过使用treeMap,但我无法超越是否可以根据另一列的值进行排序;而且我想不出一种方法来检测部门、商店和地区 ID 代码的变化......

我承认,这有点过头了。我将不胜感激。如果您需要更多信息,请告诉我——我觉得我已经描述了需要什么,但我可能遗漏了一些东西。

提前致谢!

4

2 回答 2

1

看看 Oracle 的分析函数
例如:

with tab1 as (
        select 'Dept 1' dept, 'Store 1' store, 'Region 1' region, 'ASmith' id, 101 salary,  1 overtime, 10 adjusted from dual union all
        select 'Dept 1' dept, 'Store 1' store, 'Region 1' region, 'BSmith' id, 102 salary,  2 overtime, 10 adjusted from dual union all
        select 'Dept 1' dept, 'Store 2' store, 'Region 1' region, 'CSmith' id, 104 salary,  4 overtime, 10 adjusted from dual union all
        select 'Dept 1' dept, 'Store 2' store, 'Region 1' region, 'DSmith' id, 108 salary,  8 overtime, 10 adjusted from dual union all
        select 'Dept 1' dept, 'Store 3' store, 'Region 1' region, 'DSmith' id, 108 salary,  8 overtime, 10 adjusted from dual union all
        select 'Dept 2' dept, 'Store 1' store, 'Region 1' region, 'DSmith' id, 108 salary,  8 overtime, 10 adjusted from dual union all
        select 'Dept 2' dept, 'Store 1' store, 'Region 1' region, 'ESmith' id, 116 salary, 16 overtime, 10 adjusted from dual union all
        select 'Dept 2' dept, 'Store 2' store, 'Region 1' region, 'FSmith' id, 132 salary, 32 overtime, 10 adjusted from dual union all
        select 'Dept 2' dept, 'Store 2' store, 'Region 1' region, 'ESmith' id, 116 salary, 16 overtime, 10 adjusted from dual union all
        select 'Dept 2' dept, 'Store 3' store, 'Region 1' region, 'FSmith' id, 132 salary, 32 overtime, 10 adjusted from dual
      )
select dept, store, region, sum(salary), sum(overtime), sum(adjusted)
  from tab1
 group by rollup(dept, store, region);

产生:

DEPT   STORE   REGION   SUM(SALARY) SUM(OVERTIME) SUM(ADJUSTED)
------ ------- -------- ----------- ------------- -------------
Dept 1 Store 1 Region 1     203             3            20
Dept 1 Store 1 **           203             3            20
Dept 1 Store 2 Region 1     212            12            20
Dept 1 Store 2 **           212            12            20
Dept 1 Store 3 Region 1     108             8            10
Dept 1 Store 3 **           108             8            10
Dept 1 **      **           523            23            50
Dept 2 Store 1 Region 1     224            24            20
Dept 2 Store 1 **           224            24            20
Dept 2 Store 2 Region 1     248            48            20
Dept 2 Store 2 **           248            48            20
Dept 2 Store 3 Region 1     132            32            10
Dept 2 Store 3 **           132            32            10
Dept 2 **      **           604           104            50
**     **      **          1127       127           100

其中 ** 表示 NULL 值

于 2013-10-17T03:51:21.053 回答
0

我认为您不需要使用 Java 接近 3。您应该能够使用带有 group by 子句的 sql“聚合函数”来获取您要查找的列的总数(总和)。

请参阅聚合函数sumgroup by子句或查看维基百科关于“聚合函数”的文章。

于 2013-10-16T23:10:02.737 回答