使用 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 拆分表

将行拆分为多行 PL/SQL

需要有关使用 PL/SQL 以动态方式将表数据输出到 CSV 的想法

ORA-06502: PL/SQL: 数字或值错误: NULL 索引表键值

如何在 PL/SQL 中增量集成数据