Sql 在oracle中将列结果转换为多行
我在oracle数据库中有物料信息表Sql 在oracle中将列结果转换为多行,sql,oracle,split,delimiter,Sql,Oracle,Split,Delimiter,我在oracle数据库中有物料信息表 MATERIAL COUNTRIES ---------------------------- HX345TY US,IN,SG,CN,JP MXT15WO SL,AU,IN,US,AF UIY7890#RT UK,US,IN,SG,PK 我希望输出如下 MATERIAL COUNTRIES ----------------------------- HX345TY US HX345TY IN HX345TY
MATERIAL COUNTRIES
----------------------------
HX345TY US,IN,SG,CN,JP
MXT15WO SL,AU,IN,US,AF
UIY7890#RT UK,US,IN,SG,PK
我希望输出如下
MATERIAL COUNTRIES
-----------------------------
HX345TY US
HX345TY IN
HX345TY SG
HX345TY CN
HX345TY JP
MXT15WO SL
MXT15WO AU
MXT15WO IN
MXT15WO US
MXT15WO AF
UIY7890#RT UK
UIY7890#RT US
UIY7890#RT IN
UIY7890#RT SG
UIY7890#RT PK
我在下面这样写了这个查询。但它不起作用。谁能给出解决方案
select material, trim(regexp_substr(COUNTRIES,'[^,]+', 1, level) ) COUNTRIES, level
from material_info connect by regexp_substr(COUNTRIES, '[^,]+', 1, level) is not null;
您可以通过使用distinct和regexp_count进行轻微更改,使其成为动态的
select distinct material,
regexp_substr(countries, '[^,]+', 1, level) countries
from material_info
connect by level <= regexp_count(countries, '[^,]+')
order by material;
甚至不需要使用修剪
您可以通过使用distinct和regexp_count进行轻微更改,使其成为动态的
select distinct material,
regexp_substr(countries, '[^,]+', 1, level) countries
from material_info
connect by level <= regexp_count(countries, '[^,]+')
order by material;
甚至不需要使用修剪
你应该更喜欢技术。对于大量记录,它远比distinct有效
select material,
regexp_substr(countries, '[^,]+', 1, level) countries
from material_info
connect by level <= regexp_count(countries, '[^,]+')
and prior material = material
and prior sys_guid() is not null;
你应该更喜欢技术。对于大量记录,它远比distinct有效
select material,
regexp_substr(countries, '[^,]+', 1, level) countries
from material_info
connect by level <= regexp_count(countries, '[^,]+')
and prior material = material
and prior sys_guid() is not null;
如果我想有条件地用材料过滤查询,那么查询将是什么。假设我想用'material'='UIY7890RT'进行过滤,为什么您更喜欢这种技术?有。如果我想有条件地用材料过滤查询,那么查询将是什么。假设我想用'material'='UIY7890RT'进行过滤,为什么您更喜欢这种技术?有。你不应该在一列中存储逗号分隔的值作为开始。你不应该在一列中存储逗号分隔的值作为开始