有一种解决方案,可以根据条件将一列中的多个值相加到另一列中?

时间:2019-03-28 17:05:10

标签: sql oracle aggregate-functions

我对Oracle SQL中的'SUM'函数感到困惑

这是我用来计算所有名为ACC的“ APLFTSK_CODE”行的总时间的查询部分。结果列的名称为TIME_TOTAL_ACC

SUM (
    CASE
    WHEN
    APLFTSK.APLFTSK_CODE = 'AAC'
    AND APLCALL.APLCALL_NUM = APLTSK.APLTSK_APLCALL
    THEN
    ROUND((APLTSK.APLTSK_FEND - APLTSK.APLTSK_FBEGIN)* (24 * 60)*60) 
    END
    ) 

这是我尝试“求和”时得到的结果

https://i.stack.imgur.com/OtFn3.jpg

我只得到行的单个结果,而不是满足条件的所有行的总和。我希望所有符合条件的行都具有相同的结果“ 2403”。

我在案例内部的子选择上尝试了“分组依据”,但结果为“单行子查询返回多行”

SUM (
    CASE
    WHEN
    APLFTSK.APLFTSK_CODE = 'AAC'
    AND APLCALL.APLCALL_NUM = APLTSK.APLTSK_APLCALL
    THEN
          (
          SELECT 
          ROUND((APLTSK.APLTSK_FEND - APLTSK.APLTSK_FBEGIN)* (24 * 60)*60)  
          FROM APLTSK, APLFTSK 
          GROUP BY APLTSK.APLTSK_NUM,APLFTSK.APLFTSK_CODE
          )
   END
   ) 

在这种情况下,我不知道如何处理该功能。我阅读了几个有关如何在Oracle中使用'SUM'函数的示例,但我不知道如何将其应用于我的案例。在大多数情况下,“ SUM”用于获取同一行中不同列的结果。

预先感谢您的帮助

1 个答案:

答案 0 :(得分:0)

您可能正在寻找fileABC=data.frame("id" = c(1:10), "var1" = c("5*",8,1,4,"3*",5,6,7,"7*",1), "var2" = c(7,4,6,"1*","8*",2,0,7,"0*",1)) fileQWE=data.frame("id" = c(1:10), "var1" = c(7,"5*",8,1,4,"3*",5,"7*",6,2), "var2" = c("8*",2,0,7,7,4,6,"1*","0*",1)) var1=c(fileABC$var1,fileQWE$var1) var2=c(fileABC$var2,fileQWE$var2) WANT = data.frame("id"=c(1:10,1:10) "var1"=var1, "var2"=var2, "source"=c(rep("fileABC",10), rep("fileQWE",10))) 的解析版本,例如:

words.split(';');

尽管目前尚不清楚您可能进行的分组会如何影响结果。