代码之家  ›  专栏  ›  技术社区  ›  njvb

从一个表中选择并使用MS Access中的查询插入到另一个不同类型的表的列中

  •  3
  • njvb  · 技术社区  · 14 年前

    我有一些TXT文件,其中包含有不同记录组合的表,这些记录具有不同类型的值和列的定义。我正考虑将其导入到表中,并运行一个查询来分隔不同的记录类型,因为第一列中列出了此类型的标识符。是否有方法更改查询中列的值类型?因为把它们都当作文本来对待是件痛苦的事。如果您对如何解决这一问题有任何其他建议,也请告诉我。

    以下是我从网站上获取数据的两种记录类型的表示例

    create table dbo.PUBACC_A2
    (
          Record_Type               char(2)              null,
          unique_system_identifier  numeric(9,0)         not null,
          ULS_File_Number           char(14)             null,
          EBF_Number                varchar(30)          null,
          spectrum_manager_leasing  char(1)              null,
          defacto_transfer_leasing  char(1)              null,
          new_spectrum_leasing      char(1)              null,
          spectrum_subleasing       char(1)              null,
          xfer_control_lessee       char(1)              null,
          revision_spectrum_lease   char(1)              null,
          assignment_spectrum_lease char(1)              null,
          pfr_status        char(1)          null
    
    )
    
    go
    create table dbo.PUBACC_AC
    (
          record_type               char(2)              null,
          unique_system_identifier  numeric(9,0)         not null,
          uls_file_number           char(14)             null,
          ebf_number                varchar(30)          null,
          call_sign                 char(10)             null,
          aircraft_count            int                  null,
          type_of_carrier           char(1)              null,
          portable_indicator        char(1)              null,
          fleet_indicator           char(1)              null,
          n_number                  char(10)             null
    )
    
    3 回复  |  直到 14 年前
        1
  •  1
  •   Unreason    14 年前

    是的,你可以做你想做的。在MS Access中,您可以使用任何VBA函数,并且

    IIF(FirstColumn="value1", CDate(SecondColumn), NULL) as DateValue,
    IIF(FirstColumn="value2", CDec(SecondColumn), NULL) as DecimalValue,
    IIF(FirstColumn="value3", CStr(SecondColumn), NULL) as StringValue
    

    您可以在您的选择中使用以上所有/任何一项。

    编辑:

    从您的注释来看,您似乎希望将它们拆分为不同的表-在这种情况下,导入为文本不应该是一个问题。

    a) 导入并将其放入初始表后,可以手动创建适当的表设置。 INSERT 放到适当的桌子上。

    b) 你甚至可以做一个 make table query ,但手动创建可能更快。如果执行生成表查询,则必须确保已将数据强制转换为所选内容中的正确类型。

    编辑2: 当你更新显示结构的问题时,很明显我上面的建议没有直接的帮助。

    如果这是一次性的过程,您可以遵循HLGEM的解决方案。下面是更多的细节。

    1)导入到包含两列的表中-recordtype char(2),rest memo

    2)现在可以拆分数据(进行两次基于记录类型选择的查询)并重新导出数据(以便使用Access的导入向导)

    3)现在您有两个结构合适的文本文件,可以轻松导入。

        2
  •  1
  •   HLGEM    14 年前

    我上一份工作就是这么做的。如果标识符的长度始终相同,则从具有一列或两个coulmn的临时表开始。 然后使用记录标识符,将数据移动到另一组临时表中,每种类型的记录对应一个临时表。这将在数据的列中,并且可以具有正确的数据类型。然后你做任何你需要做的数据清理。然后插入到实际生产表中。

        3
  •  0
  •   Nate CSS Guy    14 年前

    如果有一列被定义为文本,因为它同时具有字母和数字,那么您只能像查询文本一样查询它。一旦将不同的“类型”数据分离到它们自己的表中,就应该能够更改模式定义。如果我误解了你想做的事,请在这里评论。