Sql 在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

我在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     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'进行过滤,为什么您更喜欢这种技术?有。你不应该在一列中存储逗号分隔的值作为开始。你不应该在一列中存储逗号分隔的值作为开始