基于条件的Oracle总和

时间:2014-08-11 17:08:24

标签: sql excel oracle

首先是SQL,所以我可以将它引用得更低:

SELECT ID, 
       SUM(length(substr(DATA_STRING, instr(DATA_STRING,'P')+1))) 
FROM DATA P, PLC PP 
WHERE P.ID = PP.ID 
  AND instr(DATA_STRING, 'F') = 0 
GROUP BY ID

上面的函数在每个数据字符串中查找P并计算字符串中的字符数。

所以我的问题是,我有两个条件可以发生,一个数据字符串可以包含P,如上所述,或者当它包含F.我需要能够检查两者然后总结总数。上面的问题是,如果字符串出现F,那么我总结为0。

我几乎需要相当于Excel中的SUMIF,以便我可以说当我搜索P时它是0,然后查找F并加上该长度,反之亦然。

如果您有任何建议,请告诉我们。

1 个答案:

答案 0 :(得分:4)

length(substr(DATA_STRING, instr(DATA_STRING,'P')+1))?这做了很多工作。

据我所知,您需要字符串中'P''F'之后的字符数总和。如果是这样的话:

SELECT ID,
       SUM(CASE WHEN data_string like '%P%'
                THEN len(DATA_STRING) - (instr(DATA_STRING, 'P') + 1) ELSE 0
           END) as Num_P,
       SUM(CASE WHEN data_string like '%F%'
                THEN len(DATA_STRING) - (instr(DATA_STRING, 'F') + 1) ELSE 0
           END) as Num_F
FROM DATA P JOIN
     PLC PP 
     ON P.ID = PP.ID 
GROUP BY ID;

我还修改了连接语法以使用显式连接。

相关问题