对 oracle 表列中分隔列的内容求和
Posted
技术标签:
【中文标题】对 oracle 表列中分隔列的内容求和【英文标题】:sum the contents of a delimted column in an oracle table column 【发布时间】:2021-01-12 15:52:51 【问题描述】:我在 oracle 数据库表中有一个以逗号分隔的数量的列。我需要对逗号分隔的数字求和并显示。
存储过程可能是一种选择。经过大量谷歌搜索后,我也找到了以下解决方案,例如 COL1、COL2、COL3、AMOUNT。这里 AMOUNT 用逗号分隔,如下所示,
123423,23523,5454,242342
经过大量搜索找到解决方案,
select
a.COL1 as COL1,
a.COL2 as COL2,
a.COL2 as COL3,
sum(REGEXP_SUBSTR(a.AMOUNT, '\d+', 1, occ)) as SUM
from
TBL1 a,
(select level occ from DUAL connect by level < 3000)
group by a.COL1, a.COL2, a.COL3;
但这里的问题是,这是一张巨大的桌子,而且由于分组,需要很长时间。由于我们是在单行的单个列值中汇总数据,而不是与其他行聚合,是否有一种执行方式可以做到这一点?
【问题讨论】:
永远不要将数据存储为逗号分隔的项目。只会给你带来很多麻烦。 你的问题实际上是有没有一种执行方式可以做到这一点?如果是的话..请参阅jarlh的评论:) 我无法修改表格或数据的存储方式。这就是问题 【参考方案1】:这个表的糟糕设计已经给你带来了问题,但这个解决方案可能会奏效:
SELECT
a.COL1 as COL1,
a.COL2 as COL2,
a.COL2 as COL3,
(
SELECT SUM(trim(regexp_substr(amount, '[^,]+', 1, LEVEL)))
FROM dual
CONNECT BY regexp_substr(amount , '[^,]+', 1, LEVEL) IS NOT NULL
) as AMOUNT
FROM tbl1 a;
【讨论】:
以上是关于对 oracle 表列中分隔列的内容求和的主要内容,如果未能解决你的问题,请参考以下文章