如何根据oracle plsql中列中的逗号分隔值拆分select查询行
How to split select query rows based on the comma separated values in the columns in oracle plsql
我写了2个查询联盟。我得到的结果是在两列中以逗号分隔。输出显示为 2 条记录。
如何将它们拆分成 4 条记录,结果低于预期?
select emp_id,dept_name,location from department where dept_id = 1
union
select emp_id,dept_name,location from sales_dept where dept_id = 1;
输出:
emp_id ----- dept_name------ location
r1-----------Retail,IT----- US, UK
k2-----------Sales,Chemical- NZ, SA
j3-----------Biotech(Chemistry,Tech)- JA
我需要如下的预期输出:
emp_id ----- dept_name-----location
r1-----------Retail--------US
r1-----------IT----------- UK
k2-----------Sales---------NZ
k2-----------Chemical------SA
j3---------Biotech(Chemistry,Tech)--JA
dept_name 所在位置的最后一条记录 "Biotech(Chemistry,Tech)" 应显示为单条记录,不应拆分。请告诉我该怎么做。
Jim 给出的查询工作正常,但在这种情况下 dept_name 是生物技术(化学,技术),因为现在给出了要求。
请使用以下查询,
select emp_id, dept_name, location from
(select distinct emp_id, trim(regexp_substr(dept_name,'[^,]+', 1, level) ) dept_name,
trim(regexp_substr(location,'[^,]+', 1, level) ) location, level
from pivot_comma
connect by regexp_substr(dept_name, '[^,]+', 1, level) is not null
order by emp_id, level);
我写了2个查询联盟。我得到的结果是在两列中以逗号分隔。输出显示为 2 条记录。
如何将它们拆分成 4 条记录,结果低于预期?
select emp_id,dept_name,location from department where dept_id = 1
union
select emp_id,dept_name,location from sales_dept where dept_id = 1;
输出:
emp_id ----- dept_name------ location
r1-----------Retail,IT----- US, UK
k2-----------Sales,Chemical- NZ, SA
j3-----------Biotech(Chemistry,Tech)- JA
我需要如下的预期输出:
emp_id ----- dept_name-----location
r1-----------Retail--------US
r1-----------IT----------- UK
k2-----------Sales---------NZ
k2-----------Chemical------SA
j3---------Biotech(Chemistry,Tech)--JA
dept_name 所在位置的最后一条记录 "Biotech(Chemistry,Tech)" 应显示为单条记录,不应拆分。请告诉我该怎么做。
Jim 给出的查询工作正常,但在这种情况下 dept_name 是生物技术(化学,技术),因为现在给出了要求。
请使用以下查询,
select emp_id, dept_name, location from
(select distinct emp_id, trim(regexp_substr(dept_name,'[^,]+', 1, level) ) dept_name,
trim(regexp_substr(location,'[^,]+', 1, level) ) location, level
from pivot_comma
connect by regexp_substr(dept_name, '[^,]+', 1, level) is not null
order by emp_id, level);