基于条件的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 

上面的函数在每个数据string中查找P,并计算string中有多less个字符。

所以,我的问题是,我有两个可能发生的情况,其中一个数据string可能包含上面的P,或者它包含一个F.我需要能够检查两个,然后总和总和。 与上面的问题是,我总结了一个0,如果条件当string有一个F发生。

在Excel中,我几乎需要SUMIF的等价物,所以我可以说当我searchP时,它是0,然后查找F并添加该长度,反之亦然。

请让我知道,如果你有build议!

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

从我所知道的情况来看,你需要string中'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; 

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