sql - 根据列中存在的值将一行拆分为 2 行
问题描述
我需要根据列中的值将一条记录拆分为两条记录。
样本输入:
+---------+-----------+--------+--------------+------------+------------------+
| REC_KEY | SURR_KEY | REC_YR | MANUFACTURER | MODEL_NAME | ENG_POWER |
+---------+-----------+--------+--------------+------------+------------------+
| 12345 | 615099386 | 2003 | BMW | Z8 | 4.8L V8; 4.9L V8 |
+---------+-----------+--------+--------------+------------+------------------+
样本输出:
+---------+-----------+--------+--------------+------------+-----------+
| 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()
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
推荐阅读
- java - 如何使用 for 循环解决以下程序以产生适当的输出?
- java - 创建具有一种数据类型但不同模板的 c++ 向量
- javascript - 如何在css中创建隐藏效果
- flutter - 蜂巢颤振使用
- python - Huggingface 脚本的变形金刚库中的简单 PytorchBenchmark 给出了 CUDA 初始化错误
- flutter - 在颤动中使用 GestureDetector 移动旋转的图像
- java - 如何在 3.1 版本中关闭 commons-httpclient 连接
- javascript - 在不同的组件reactjs上显示隐藏侧边菜单
- r - 如何在R中建立一个中位数表?
- shell - 如何在 lftp 中运行 shell 命令进行文件传输?