есть ли способ переставить две строки и получить в результате таблицу?
У меня есть следующие две строки:
String_Cod = 14521;65412;65845
String_Flags = 1;0;1
for code 14521 the flag is 1
for code 65412 the flag is 0
for code 65845 the flag is 1
in this order always
Результат должен быть примерно таким
Я начинаю с этого запроса:
select regexp_substr(to_char(:STRING_COD),'[^;]+', 1, level)
from dual
connect BY regexp_substr(to_char(:STRING_COD), '[^;]+', 1, level)
is not null
select regexp_substr(to_char(:STRING_FLAGS),'[^;]+', 1, level)
from dual
connect BY regexp_substr(to_char(:STRING_FLAGS), '[^;]+', 1, level)
is not null
Но я понятия не имею, как продолжить объединение обоих и получить нужный мне результат.
Может кто-нибудь посоветует?
С Уважением
1 ответ
Решение
Вы можете добавить уровень в качестве другого столбца в каждый запрос и объединить их вместе:
select c.cod, f.flag
from (
select level as n, regexp_substr(to_char('14521;65412;65845'),'[^;]+', 1, level) as cod
from dual
connect BY regexp_substr(to_char('14521;65412;65845'), '[^;]+', 1, level)
is not null
) c
join (
select level as n, regexp_substr(to_char('1;0;1'),'[^;]+', 1, level) as flag
from dual
connect BY regexp_substr(to_char('1;0;1'), '[^;]+', 1, level)
is not null
) f
on f.n = c.n
которые - с внешними соединениями - допускают разное количество элементов; или, проще говоря, как вы предполагаете, они всегда будут совпадать, используйте один и тот же уровень для обоих отрывков:
select regexp_substr(to_char('14521;65412;65845'),'[^;]+', 1, level) as cod,
regexp_substr(to_char('1;0;1'),'[^;]+', 1, level) as flag
from dual
connect BY regexp_substr(to_char('14521;65412;65845'), '[^;]+', 1, level)
is not null
COD | FLAG
:---- | :---
14521 | 1
65412 | 0
65845 | 1
Этот метод расширения списка значений также предполагает, что у вас никогда не может быть нулевых элементов ни в одном списке. Читать далее.