Tenho uma tabela com a estrutura abaixo:
create table student_info
(
item_number number,
st_firstname varchar2(50),
st_lastname varchar2(50),
st_score varchar2(50)
)
Aqui está um exemplo de dados da tabela:
item_number | st_firstname | st_lastname | st_score
----------------------------------------------------------------------------
1 Ali|Reza|Pantea Hashemi|Nosrati|Yaghobi 10|20|20
2 Maryam|Ahmad Moghise|Majlesi 20|20
Eu preciso ter a saída abaixo:
item_number | st_firstname | st_lastname | st_score
----------------------------------------------------------------------------
1 Ali Hashemi 10
1 Reza Nosrati 20
1 Pantea Yaghobi 20
2 Maryam Moghise 20
2 Ahmad Majlesi 20
Descobri que, com a consulta abaixo, posso fazer o que quiser com uma das colunas (que é st_firstname
):
select distinct t.item_number,
trim(regexp_substr(t.st_firstname, '[^|]+', 1, level)) str
from student_info t
connect by instr(st_firstname, '|', 1, level - 1) > 0
order by t.item_number
O problema é que não sei como adicionar outras colunas (st_lastname , st_lastname) à consulta acima. Eu queria saber se você poderia me ajudar aqui.
desde já, obrigado
Você simplesmente precisa adicionar colunas adicionais, por exemplo:
NB, atualizei a
connect by
cláusula para restringi-la a fazer um loop em cada linha, em vez de tentar conectar hierarquicamente todas as linhas (essa é a loucura! E também desempenho ruim, se o seu conjunto de dados tiver muitas linhas). Observe que, por causa disso, você não precisa mais dodistinct
, pois as linhas "duplicadas" não são mais produzidas.