Обновление значений на основе последовательности строк - Oracle SQL - PullRequest
0 голосов
/ 06 июня 2019

У меня есть таблица:

table1

u_a_id      d_c_s       c_nm                        c_v     c_se  line_num
19          878         Test Code - Individual      CO      1     30
19          878         Test Code - Individual      PR      1     31
19          878         Test Code - Individual      PR      2     32
19          878         Test Code - Individual      CO      2     33

19          878         Test Code - Individual      CO      1     33
19          878         Test Code - Individual      PR      1     34
19          878         Test Code - Individual      PR      2     35
19          878         Test Code - Individual      CO      2     36
19          878         Test Code - Individual      PR      3     37
19          878         Test Code - Individual      CO      3     38

Для каждого u_a_id, порядка по line_num, мне нужно определить, повторяется ли комбинация c_nm и c_se.Если комбинация повторяется, то мне нужно обновить следующее на основе последовательности:

  • d_c_s до 12000 для первого
  • d_c_s до 12001 для второго
  • d_c_sк 12002 для третьего
  • добавление первого к c_nm
  • добавление второго к c_nm
  • добавление третьего к c_nm

Вывод будет выглядеть следующим образом:

u_a_id      d_c_s       c_nm                                c_v     c_se  line_num
19          12000       Test Code, First - Individual       CO      1     30
19          12001       Test Code, Second - Individual      PR      1     31
19          12000       Test Code, First - Individual       PR      2     32
19          12001       Test Code, Second - Individual      CO      2     33

19          12000       Test Code, First - Individual       CO      1     33
19          12001       Test Code, Second - Individual      PR      1     34
19          12000       Test Code, First - Individual       PR      2     35
19          12001       Test Code, Second - Individual      CO      2     36
19          12000       Test Code, First - Individual       PR      3     37
19          12001       Test Code, Second - Individual      CO      3     38

Есть ли в SQL что-нибудь сделать?

1 Ответ

0 голосов
/ 06 июня 2019

То, что вы описываете, больше похоже на это:

выберите. , .,

       (12000 - 1 + seqnum) as d_c_s,
       replace(c_nm, ' - ',
               (case seqnum
                     when 1 then ', First - '
                     when 2 then ', Second - '
                     when 3 then ', Third - '
                     else ' - '
                end)
               ) as c_nm
from (select t.*,
             row_number() over (partition by c_nm, c_se order by line_num) as seqnum,
             count(*) over (partition by c_nm, c_se) as cnt  
      from t 
     ) t
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...