首页 > 解决方案 > 由于字段长度限制,将总和值分成多行

问题描述

我正在通过汇总金额并将其插入汇总表中来从一个非常大的表(超过 1 亿行)中迁移财务数据。当汇总金额(30 亿)大于汇总表中的字段可以容纳的数量(最多只能容纳 9.99 亿)时,我遇到了问题。更改字段大小不是一种选择,因为它需要更改过程。

我唯一的选择是将金额(违反大小限制的金额)分成较小的金额,以便可以将其插入表格中。

我遇到了这个SQL - 我需要将总值分成另一个表中的多行,除了我需要插入的行数是动态的之外,该表类似。

为简单起见,这就是源表的样子

帐户表

acct_num   |      amt
-------------------------------
   101         125.00
   101         550.00
   101         650.00
   101         375.00
   101         475.00
   102          15.00
   103         325.00
   103         875.00
   104         200.00
   104         275.00

简要记录如下

select acct_num, sum(amt) 
from account_table
group by acct_num

帐户汇总

acct_num   |      amt
-------------------------------
   101        2175.00
   102          15.00
   103        1200.00
   104         475.00

假设目标表中的最大值为 1000.00,则预期输出为

汇总表

acct_num   |      amt
-------------------------------
   101        1000.00
   101        1000.00
   101         175.00
   102          15.00
   103        1000.00
   103         200.00
   104         475.00

如何创建查询以获得预期结果?提前致谢。

标签: sqloracle

解决方案


你需要一个数字表。如果您有几个值,您可以手动定义它。否则,您可能手头有一个或使用类似的逻辑:

with n as (
      select (rownum - 1) as n
      from account_table
      where rownum <= 10
     ),
     a as (
      select acct_num, sum(amt) as amt
      from account_table
      group by acct_num
     ) 
select acct_num,
       (case when (n.n + 1) * 1000 < amt then 1000
             else amt - n.n * 1000
        end) as amt
from a join
     n
     on n.n * 1000 < amt ;

推荐阅读