Какой будет запрос select для получения ниже вывода (Oracle 11g)? - PullRequest
0 голосов
/ 12 февраля 2019

Каким будет запрос на выборку в Oracle 11g?

Input Table
------------------
Feed_id    User_Id
CL300      K111222;K555444;M123123

Required Output
--------------------------
Feed_id    User_Id
CL300       K111222
CL300       K555444
CL300       M123123

Ответы [ 2 ]

0 голосов
/ 12 февраля 2019
 WITH input_table AS 
 (
   SELECT  'CL300'                   AS  feed_id, 
           'K111222;K555444;M123123' AS user_id 
   FROM     dual
 )
 SELECT   feed_id,
          REGEXP_SUBSTR(REPLACE(REPLACE(user_id, ';;', '; ;'),';;','; ;'), '[^;]+', 1, LEVEL) AS user_id
 FROM     input_table
 CONNECT  BY
          REGEXP_SUBSTR(REPLACE(REPLACE(user_id, ';;', '; ;'),';;','; ;'), '[^;]+', 1, LEVEL) IS NOT NULL
0 голосов
/ 12 февраля 2019

Попробуйте следующим образом:

SQL-скрипта

Настройка схемы Oracle 11g R2 :

CREATE TABLE t
    ("Feed_id" varchar2(5), "User_Id" varchar2(23))
;

INSERT ALL 
    INTO t ("Feed_id", "User_Id")
         VALUES ('CL300', 'K111222;K555444;M123123')
SELECT * FROM dual
;

Запрос 1 :

select
  "Feed_id",
  trim(regexp_substr("User_Id", '[^;]+', 1, levels.column_value))  as User_Id
from 
  t,
  table(cast(multiset(select level from dual connect by  level <= length (regexp_replace("User_Id", '[^;]+'))  + 1) as sys.OdciNumberList)) levels

Результаты :

| Feed_id | USER_ID |
|---------|---------|
|   CL300 | K111222 |
|   CL300 | K555444 |
|   CL300 | M123123 |
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...