перебирать строку в каждой строке и подсчитывать переменную, если значение атрибута больше 1 - PullRequest
0 голосов
/ 17 июня 2020

У меня есть строка, как показано ниже

[["","","2","1","1","1","1","0","0","0","0","0"],["","","0","0","0","1","2","3","2","0","0","0"],["","","0","0","1","2","2","1","1","1","2","0"],["","","0","0","0","1","2","2","2","1","0","0"]]

Я разбил каждый список в виде строк, используя запрос ниже

 with dataa (d) as
   (SELECT '[["","","2","1","1","1","1","0","0","0","0","0"],["","","0","0","0","1","2","3","2","0","0","0"],["","","0","0","1","2","2","1","1","1","2","0"],["","","0","0","0","1","2","2","2","1","0","0"]]' from dual)
   select level, '[' || ltrim(ltrim(regexp_substr(d,'[^]]+',1,level) || ']',','),'[') as str
    from dataa
  connect by level <= regexp_count(d,'\[') - 1;

Это результат:

enter image description here

Теперь мне нужно значение счетчика каждой строки, если число больше 1

1 row --> 1
2 row --> 3
.....
.....

Ответы [ 2 ]

1 голос
/ 17 июня 2020

Вы можете использовать следующий запрос в for loop:

with dataa (d) as
(select '[["","","2","1","1","1","1","0","0","0","0","0"],["","","0","0","0","1","2","3","2","0","0","0"],["","","0","0","1","2","2","1","1","1","2","0"],["","","0","0","0","1","2","2","2","1","0","0"]]' from dual)
-- query starts from
SELECT CNTR
  FROM
    (SELECT T.STR, REGEXP_SUBSTR(T.STR, '[0-9]+',1,COLUMN_VALUE) AS CNTR, COLUMN_VALUE AS LVL, LVLIN
       FROM
           (select '[' || ltrim(ltrim(regexp_substr(d,'[^]]+',1,level) || ']',','),'[') as str, LEVEL AS LVLIN
              from dataa
            connect by level <= regexp_count(d,'\[') - 1) T
     CROSS JOIN
     table(cast(multiset(select level from dual
                         connect by  level <= length (regexp_replace(t.STR, '[^,]+'))  + 1)
                          as sys.OdciNumberList)) levels)
ORDER BY LVLIN, LVL;
0 голосов
/ 17 июня 2020

После разделения строки вы можете использовать только числа от 2 до 9.

with dataa (d)
     as (select '[["","","2","1","1","1","1","0","0","0","0","0"],["","","0","0","0","1","2","3","2","0","0","0"],["","","0","0","1","2","2","1","1","1","2","0"],["","","0","0","0","1","2","2","2","1","0","0"]]'
           from DUAL)
select lev,length(regexp_replace(str, '[^2-9]', ''))
  from (    select LEVEL lev,                      
                    REGEXP_SUBSTR (d,
                                     '[^]]+',
                                     1,
                                     LEVEL)
                      as str
              from dataa
        connect by LEVEL <= REGEXP_COUNT (d, '\[') - 1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...