sql - 由于字段长度限制,将总和值分成多行
问题描述
我正在通过汇总金额并将其插入汇总表中来从一个非常大的表(超过 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
如何创建查询以获得预期结果?提前致谢。
解决方案
你需要一个数字表。如果您有几个值,您可以手动定义它。否则,您可能手头有一个或使用类似的逻辑:
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 ;
推荐阅读
- reactjs - React 的 Typescript 编译错误 - 类型“元素”不可分配给类型“FunctionComponent<{}>”
- r - 在R中的不同数据集之间分配一个以字符串匹配为条件的数值?
- javascript - 打字稿无法推断自定义挂钩中的解构数组类型
- java - NestedScrollView 不显示在 AlertDialog 中
- python - ValueError:无法将字符串转换为浮点数:'F' python
- azure - 将 JSON 字符串传递到 Azure CLI(来自 PowerShell)时,需要用双引号括起来的属性名称
- vue.js - 如何在 vuetify 中将图像添加到 v-card
- angular - Angular 如何提前加载组件的数据
- c++ - '{' 标记之前的预期 unqualified-id
- amp-html - 谷歌故事板功能