使用 pl/sql 或 sql 将数据拆分到学生表中的多个列
Posted
技术标签:
【中文标题】使用 pl/sql 或 sql 将数据拆分到学生表中的多个列【英文标题】:Split the data across multiple columns in student Table using pl/sql or sql 【发布时间】:2020-03-26 15:37:47 【问题描述】:请帮助我。目前我正在研究 pl/sql 过程。在运动表中有 ID,对于同一个 ID 有多个代码。我需要拆分这些多个代码并将它们作为代码1,代码2,代码3插入到学生表中。
源表
ID CODE
----------
222 4wta
----------
223 5qer
----------
222 5qer
-----------
224 3der
---------
所需的表
ID CODE1 CODE2 CODE3
-------------------------
222 4wta 5qer NULL
-------------------------
223 5qer NULL NULL
------------------------
224 3der NULL NULL
------------------------
【问题讨论】:
Desired table 是您希望从 SQL 查询中获得的结果,对吗?我的意思是,它不是数据库表,是吗? 【参考方案1】:借助分析函数(决定要获取哪个CODEn
)和聚合,您将拥有这个(假设每个ID
最多有3 个代码)。
样本数据:
SQL> select * From src;
ID CODE
---------- ----
222 4wta
223 5qer
222 5qer
224 3der
插入:
SQL> insert into trg (id, code1, code2, code3)
2 with temp as
3 (select id, code,
4 row_number() over (partition by id order by code) rn
5 from src
6 )
7 select id,
8 max(case when rn = 1 then code end) code1,
9 max(case when rn = 2 then code end) code2,
10 max(case when rn = 3 then code end) code3
11 from temp
12 group by id;
3 rows created.
结果:
SQL> select * From trg;
ID CODE1 CODE2 CODE3
---------- ----- ----- -----
222 4wta 5qer
223 5qer
224 3der
SQL>
【讨论】:
非常感谢您的及时回复。非常感谢您的宝贵时间。但我想要的表有 10 多个字段和 4 个字段用于 code1...code4。对于其他字段,我从不同的表中检索数据并为它们分配新的变量名称。例如,从 id=a.id 的主题中选择 desc、subject、id 到 temp_decs、temp_sub、temp_id。检索到所有必需的数据后,将它们插入新表中。所以我不确定它是否有效。但我会试试这个代码。再次感谢! 我试过代码。但它没有用。请告诉我这个“温度”是什么?当我运行时出现以下错误。SQL 错误:ora-00936:"missing expression" 上述答案中的 SRC 将转换为您的运动表... TRG 将转换为您的学生表... temp 是所谓的 CTE (docs.oracle.com/cd/E17952_01/mysql-8.0-en/with.html),它从运动表并对其进行重新组织,以便您可以从中选择所需的内容。 阿努,我们知道你告诉我们什么。在您的问题中没有“10 列和 4 个代码和不同的表格”等迹象。无论如何:如果您可以创建返回所需数据的 SELECT 语句,则将其转换为 INSERT 是一项简单的任务。 @Shaun 已经回答了您的其余问题(谢谢,Shaun)。 谢谢肖恩和小脚!以上是关于使用 pl/sql 或 sql 将数据拆分到学生表中的多个列的主要内容,如果未能解决你的问题,请参考以下文章
Oracle PL/SQL 程序在源表中拆分逗号分隔的数据并推送到目标表中
需要有关使用 PL/SQL 以动态方式将表数据输出到 CSV 的想法