2012-10-18 41 views
0

我試圖在列中添加所有值以獲取該列的總數,任何人都知道這個技巧?Oracle - 在單個列中添加所有值

這裏是我的查詢:

select T.*, 
sum(nvl(BIN1,0))+sum(nvl(BIN2,0))+sum(nvl((BIN3,0)) as TOTAL 
from 
(
    SELECT CSM_FLASKS.FLASK_CODE, 
    MN_ASSAYS_STAGES.ASSAY_STAGE_ID, 
    VITRO_REP.TREATMENT_DOSE(CSM_FLASKS.GROUP_ID)            AS TREATMENT_DOSE, 
    MN_RI_REP.FLASK_BIN_VALUE_BY_INDEX(MN_ASSAYS_STAGES.ASSAY_STAGE_ID, CSM_FLASKS.FLASK_ID, 1) AS BIN1, 
    MN_RI_REP.FLASK_BIN_VALUE_BY_INDEX(MN_ASSAYS_STAGES.ASSAY_STAGE_ID, CSM_FLASKS.FLASK_ID, 2) AS BIN2, 
    MN_RI_REP.FLASK_BIN_VALUE_BY_INDEX(MN_ASSAYS_STAGES.ASSAY_STAGE_ID, CSM_FLASKS.FLASK_ID, 3) AS BIN3, 
    MN_RI_REP.CBPI_FLASK(MN_ASSAYS_STAGES.ASSAY_STAGE_ID, CSM_FLASKS.FLASK_ID, 1, 2, 2)   AS CBPI, 
    CSM_EXPERIMENTS.EXPT_CODE 
    FROM CSM_TREATMENT_GROUPS_EXPTS 
    INNER JOIN CSM_ASSAYS 
    ON CSM_ASSAYS.EXPT_ID = CSM_TREATMENT_GROUPS_EXPTS.EXPERIMENT_ID 
    INNER JOIN CSM_FLASKS 
    ON CSM_TREATMENT_GROUPS_EXPTS.GROUP_ID = CSM_FLASKS.GROUP_ID 
    INNER JOIN MN_ASSAYS 
    ON CSM_ASSAYS.ASSAY_ID = MN_ASSAYS.ASSAY_ID 
    INNER JOIN MN_ASSAYS_STAGES 
    ON MN_ASSAYS.MN_ASSAY_ID = MN_ASSAYS_STAGES.MN_ASSAY_ID 
    INNER JOIN CSM_EXPERIMENTS 
    ON CSM_EXPERIMENTS.EXPT_ID = CSM_TREATMENT_GROUPS_EXPTS.EXPERIMENT_ID 
    AND CSM_EXPERIMENTS.EXPT_ID = CSM_ASSAYS.EXPT_ID 
    WHERE CSM_ASSAYS.ASSAY_ID  = 1000060 
    AND MN_ASSAYS_STAGES.STAGE_ID = 2 
    ORDER BY CSM_TREATMENT_GROUPS_EXPTS.ORDER_INDEX, 
    CSM_FLASKS.FLASK_ID, 
    CSM_FLASKS.IS_PLUS DESC 
) T 

錯誤: ORA-00937:不是單組分組函數 00937. 00000 - 「不是一個單一羣組功能」 *原因:
*操作: 錯誤在行:1列:9

回答

3

使用任何聚合函數時,您需要將非聚合字段添加到GROUP BY子句中。因此,在列中,您需要列出GROUP BY子句中聚合函數SUM中未列出的字段。因此,您的查詢應該如下:

SELECT FLASK_CODE, 
SUM(nvl(BIN1, 0)) + SUM(nvl(BIN2, 0)) + SUM(nvl((BIN3, 0)) AS TOTAL 
FROM 
(
    ... 

) T 
GROUP BY FLASK_CODE 

這只是一個例子。但是您必須確定SELECT子句中要選擇的字段,並且需要在GROUP BY子句中列出。

1

試試這個: 如果您在單個列添加的所有數據意味着:

select sum(column_name) from table inner join .........; 

最後你會發現總