2013-04-08 59 views
0

我希望有人能幫助我。在Oracle中用逗號分隔的列中的計數或總計值SQL

我期待在excel中找到來自同一個字段的多個值的總數是否有可能?

我的樣品列是:

0,0,1,1,1,2 

我想所有這些值在輸出加在一起,總共有列

感謝

+0

哪一個是您的數據庫? – TechDo 2013-04-08 10:54:57

+0

你想告訴你有2'0',3'''和'1''嗎?如果是這樣,我會用逗號分隔單元格並轉置數據。然後,在記錄上運行一個數據透視表。你問的這個問題很好。如果你願意,我可以擴展更多關於如何做到這一點。 – Jerry 2013-04-08 10:57:56

+0

你好,謝謝你的反應,它不完全是我需要的,我希望從oracle數據庫執行此操作並將其顯示爲字段。數字可以改變,所以我可以有一行0,0,1,1,1,2我想顯示數字5,但下一行可能是1,1,2,6,10,所以我需要20來顯示在總列 – 2013-04-08 11:08:36

回答

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; 
+0

嗨,謝謝你的反應,它不完全是我需要的,我期待從oracle數據庫執行此操作並將其顯示爲字段。數字可以改變,所以我可以有一行0,0,1,1,1,2我想顯示數字5,但下一行可能是1,1,2,6,10,所以我需要20來顯示在總列 – 2013-04-08 11:01:40

+0

它是否適用於您的情況? – TechDo 2013-04-08 11:04:36

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

+0

好的作品。 +1 – TechDo 2013-04-08 11:32:58

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 

分享和享受。