Oracle SQL中以逗号分隔的列中的Count或Sum值

时间:2013-04-08 10:49:29

标签: sql oracle

我希望有人可以帮助我。

我希望在excel中找到来自同一字段的多个值的总和是否可能?

我的示例栏是:

0,0,1,1,1,2

我想将所有这些值加在一起,并在输出中有一个总列

由于

3 个答案:

答案 0 :(得分:5)

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

fiddle

答案 1 :(得分:0)

请尝试:

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;

答案 2 :(得分:0)

建立在@ 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

分享并享受。