java - oracle中三串列的公共(public)子串合并

标签 java string oracle group-by

我有以下三列 -

Dated                    status                count 
01-02-13              1A + 2B + 73PLO           76
01-02-13              29A + 17ACB               46
01-02-13              9PLO + 11B + 5TY          25
02-02-13              18FGH + 23B + 4ACB        45
02-02-13              8ACB + 12A + 2FGH         22
02-02-13              6A + 2B + 42ACB           50
03-02-13              .....                     ...
............

因此,我的最终结果应该为特定的“日期”添加三个字符串(“状态”),但请记住特定日期的三个字符串的公共(public)子字符串,如下 -

dated                     status                            count
01-02-13         30A + 13B + 82PLO + 17ACB + 5TY             147
02-02-13         20FGH + 25B + 73PLO + 54ACB + 18A           117
03-02-13              ......(and similarly)                  ....

在这里,我实际上通过添加计数并合并“状态”来创建一个“日期”表达式组,但实际上我无法达到这个...... 需要一些帮助。

最佳答案

没有经过彻底的测试,但我认为这是你所需要的,我没有考虑所有的测试用例,可能在某些情况下总计数有所不同,但状态分组是正确的。

 SELECT dated
      ,LISTAGG(num||val, ' + ') WITHIN GROUP (ORDER BY val) status
     ,MAX(cnt) "count"
 FROM
  --middle section start
  (
    SELECT dated
          ,SUM(regexp_substr(sub_status,'[0-9]+')) num
         ,regexp_substr(sub_status,'[A-Z]+')val,MAX(cnt) cnt
     FROM
        --inner section start
        (
         SELECT DISTINCT dated
                        ,TRIM(REGEXP_SUBSTR( status, '[^+]+', 1, LEVEL)) sub_status
                        ,SUM(DISTINCT "count") OVER(PARTITION BY dated) cnt
         FROM DATA
        CONNECT BY LEVEL <= LENGTH(REGEXP_REPLACE(status, '[^+]+')) + 1
         )
         --inner section end 
   GROUP BY dated
           ,regexp_substr(sub_status,'[A-Z]+')
   )
   --middle section end
 GROUP BY dated;
  1. 内部部分:首先我尝试分隔由 + 分隔的行中的所有不同值
  2. 然后我进一步分离该值,删除数字部分和字母部分。
  3. 中间部分:我尝试根据日期列和字母部分的分组来计算数字部分的总和。
  4. 外部部分:我根据日期列合并中间部分的结果,用+分隔

*注意*我还没有测试过这个,但这应该是解决这个问题的方法,不考虑同一组中具有相同值的计数

SQLFIDDLE

关于java - oracle中三串列的公共(public)子串合并,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20440638/

相关文章:

java - 如何从游标中获取记录

java - teechart java 中 setMinMax() 函数后重叠标签

python - 在 python 3.x 中使用正则表达式抓取字符串的一部分

string - python : Printing unicode characters beyond FFFF

sql - Oracle中如何替换字符串?

java - java中的字符串引用

java - 控制台输出是阻塞操作吗?

string - Scala:如何找出用于 StringOps.map 的 CanBuildFrom 实现

python - 如何在当前服务器上没有安装 Oracle 的情况下连接 Django 中的远程 Oracle 数据库?

python - 使用 Python 将值列表传递给 Oracle