Sql 如何将一个有4列的表拆分为两个各有2列的表

Sql 如何将一个有4列的表拆分为两个各有2列的表,sql,oracle,Sql,Oracle,我试图将一个包含100列的表拆分为20个表,它们都是按列拆分的,例如一个表中的第1列到第5列,第二个表中的第6列到第10列……等等 我想为每个分区添加一个外键字段,可以将每个分区与另一个分区连接起来,这样分区表将包括第1列到第5列+一个新的外键列,可以将每个分区与下一个分区连接起来。您可以使用sql生成两个sql脚本。一个用于创建表,另一个用于将数据复制到目标表中。为了关联数据,表上必须有一个主键。PK_COLUMN_LIST是主键列的列表,如EMPLOYEE_ID、MANAGER_ID。PK_

我试图将一个包含100列的表拆分为20个表,它们都是按列拆分的,例如一个表中的第1列到第5列,第二个表中的第6列到第10列……等等


我想为每个分区添加一个外键字段,可以将每个分区与另一个分区连接起来,这样分区表将包括第1列到第5列+一个新的外键列,可以将每个分区与下一个分区连接起来。

您可以使用sql生成两个sql脚本。一个用于创建表,另一个用于将数据复制到目标表中。为了关联数据,表上必须有一个主键。PK_COLUMN_LIST是主键列的列表,如EMPLOYEE_ID、MANAGER_ID。PK_COLUMN_LIST_QUOTED是主键列的列表,但被引用,例如“EMPLOYEE_ID”、“MANAGER_ID”。如果没有主键,请添加一列并为每行指定一个序列

    select 'CREATE TABLE <TABLE_NAME>'|| min(c.column_id)|| ' as select 
    <PK_COLUMN_LIST> '||listagg(column_name,',')within group(order by c.column_id ) 
     ||' from <TABLE_NAME> where 1=0;'
    from user_tab_columns c where table_name = '<TABLE_NAME>'
    and c.COLUMN_NAME  not in (<PK_COLUMN_LIST_QUOTED>)
    group by mod(c.COLUMN_ID, 20);

这些sql语句的输出可以在脚本中运行,或者如果您需要自动化过程,您可以选择变量并立即执行或使用dbms_sql。

请尝试构建一个示例表,例如4列,包含一些记录,并尝试解释您需要获得的内容,甚至发布您想要创建的表,它们的约束和数据。事实上,很难理解你的需要并帮助你
    select 'INSERT ALL' from dual
    union all
    select  ' INTO <TABLE_NAME>'|| min(c.column_id)|| ' (  <PK_COLUMN_LIST>'||
    listagg(column_name,',')within group(order by c.column_id ) 
    || ') values ( <PK_COLUMN_LIST> ,'||  listagg(column_name,',')within group(order by c.column_id )    ||' )'
    from user_tab_columns c where table_name = '<TABLE_NAME>'
    and c.COLUMN_NAME  not in (<PK_COLUMN_LIST_QUOTED>)
    group by mod(c.COLUMN_ID, 20)
    union all select 
    'select t.* from <TABLE_NAME> t' from dual;