我希望有一个人可以帮助我。
我正在寻找 excel 中同一字段的多个值的总和,这可能吗?
我的示例专栏是:
0,0,1,1,1,2
我想将所有这些值加在一起,并在输出中有一个总列
谢谢
select
id,
list,
sum(regexp_substr(list, '\d+', 1, occ)) as total
from
your_table,
(select level occ from dual connect by level < 2000)
group by id, list
order by 1
请试试:
SET SERVEROUTPUT ON
DECLARE
lv_formula VARCHAR2(1000):='0,0,1,1,1,2';
result NUMBER;
BEGIN
lv_formula:=replace(lv_formula, ',', '+');
EXECUTE IMMEDIATE 'BEGIN :out := '||lv_formula||'; END;' USING OUT result;
DBMS_OUTPUT.PUT_LINE('Answer is...' || result);
END;
以@techdo 的回答为基础(请投票或接受他的回答——我所做的只是充实这一点),这是一种方法:
首先,构建一个函数来实现@techdo 的代码:
CREATE OR REPLACE FUNCTION SUM_CSV(pin_Csv IN VARCHAR2)
RETURN NUMBER
DETERMINISTIC
IS
strFormula VARCHAR2(1000);
nResult NUMBER;
BEGIN
strFormula := REPLACE(pin_Csv, ',', '+');
EXECUTE IMMEDIATE 'BEGIN :out := ' || strFormula || '; END;' USING OUT nResult;
RETURN nResult;
END SUM_CSV;
请注意,该函数必须是确定性的——也就是说,对于给定的输入值,它总是产生相同的结果。
然后创建一个包含调用函数 SUM_CSV 的虚拟列的表:
CREATE TABLE csv_test
(text VARCHAR2(1000),
total NUMBER AS (SUM_CSV(text))); -- virtual column
现在,插入表中:
INSERT INTO CSV_TEST(TEXT) VALUES('1,2,3,4,5');
提交插入,然后取回值:
SELECT * FROM CSV_TEST;
你得到
TEXT TOTAL
1,2,3,4,5 15
分享和享受。