代码之家  ›  专栏  ›  技术社区  ›  ZAX

Oracle基于条件的总和

  •  0
  • ZAX  · 技术社区  · 11 年前

    首先使用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 回复  |  直到 11 年前
        1
  •  4
  •   Gordon Linoff    11 年前

    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;
    

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