繁体   English   中英

根据列中存在的值将一行拆分为 2 行

[英]Splitting a row into 2 rows based on value present in a column

我需要根据列中的值将一条记录拆分为两条记录。

样本输入:

+---------+-----------+--------+--------------+------------+------------------+
| REC_KEY | SURR_KEY  | REC_YR | MANUFACTURER | MODEL_NAME |    ENG_POWER     |
+---------+-----------+--------+--------------+------------+------------------+
|   12345 | 615099386 |   2003 | BMW          | Z8         | 4.8L V8; 4.9L V8 |
+---------+-----------+--------+--------------+------------+------------------+

样品 Output:

+---------+-----------+--------+--------------+------------+-----------+
| REC_KEY | SURR_KEY  | REC_YR | MANUFACTURER | MODEL_NAME | ENG_POWER |
+---------+-----------+--------+--------------+------------+-----------+
|   12345 | 615099386 |   2003 | BMW          | Z8         | 4.8L V8   |
|   12345 | 615099386 |   2003 | BMW          | Z8         | 4.9L V8   |
+---------+-----------+--------+--------------+------------+-----------+

有什么方法可以实现吗?

您可以将该列的值拆分为; 通过使用REGEXP_SUBSTR()字符,同时通过REGEXP_COUNT() function 计算该字符的数量

 SELECT rec_key, surr_key, rec_yr, manufacturer, model_name, 
        TRIM( REGEXP_SUBSTR(eng_power,'[^;]+',1,level) ) AS eng_power 
   FROM tab 
CONNECT BY level <= REGEXP_COUNT(eng_power,';') + 1
    AND PRIOR SYS_GUID() IS NOT NULL
    AND PRIOR rec_key = rec_key

演示

试试这个 SQL 脚本:

with cte(a,b,c,d,e,f) as 
( select 12345 , 615099386 ,  2003 ,'BMW','Z8','4.8L V8; 4.9L V8' from dual)
select a,b,c,d,e,
ltrim(regexp_substr(f,'[^;]+',1,level)) as f from cte
connect by level<=length(f)-length(replace(f,';',''))+1;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM