Oracle перебирает значения по столбцам (Oracle 11) - PullRequest
0 голосов
/ 14 мая 2019

Итак, у меня есть некоторые данные, подобные этому

NO| ID    | PID | COUNT
1 | 00033 | P4  | 1
2 | 00033 | P3  | 3
3 | 00033 | P2  | 2

Я хочу повторить ID и PID на основе значений счетчика, как это

NO| ID    | PID
1 | 00033 | P4
2 | 00033 | P3
3 | 00033 | P3
4 | 00033 | P3
5 | 00033 | P2
6 | 00033 | P2

фактически это уже решено с помощью этого запроса

SELECT row_number() OVER ( ORDER BY t."ID", t."PID" DESC ) as NO, 
       t."ID", t."PID"
FROM Table1 t
CROSS APPLY(
  SELECT 1 FROM dual
  CONNECT BY level <= t."COUNT"
)
ORDER BY t."ID", t."PID" DESC

по этой ссылке Oracle повторяет значения по столбцам

но поскольку наша БД использует oracle 11. код больше не работает.

Я хотел бы знать тот же подход для оракула 11.

С уважением, Риан

1 Ответ

4 голосов
/ 14 мая 2019

Приведите этот иерархический запрос к таблице чисел и затем присоединитесь:

with 
  t("NO", "ID", "PID", "COUNT") as (
    select 1, '00033', 'P4', 1 from dual union all
    select 2, '00033', 'P3', 3 from dual union all
    select 3, '00033', 'P2', 2 from dual ),
  a as (select t.*, 
               cast(multiset(select level lvl 
                             from dual 
                             connect by level <= "COUNT") 
                    as sys.odcinumberlist) nums 
          from t)
select "NO", "ID", "PID" from a cross join table(nums) 

Результат:

        NO ID    PID
---------- ----- ---
         1 00033 P4
         2 00033 P3
         2 00033 P3
         2 00033 P3
         3 00033 P2
         3 00033 P2
6 rows selected
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...