将多列合并为单列[重复]

Posted

技术标签:

【中文标题】将多列合并为单列[重复]【英文标题】:Consolidate Multiple Columns to Single Column [duplicate] 【发布时间】:2021-05-04 22:14:44 【问题描述】:

我正在寻找 VBA 是否有办法从多列中获取数据并将其转换为多行。我正在处理从 Excel 电子表格导入的数据。

有一组10列和多组2列的信息相同(不重复);我的最终目标是为每列中的每条记录分别设置一行。

样本数据:

Company ID (Not the primary key) License 1 License 2 License 3 etc.
Company_1234 A B C-10
Company_2345 B
Company_3456 C-35 B C-05 D-39
Company ID (Not the primary key) First Name Last Name Office Number Alt. First Name Alt. Last Name Alt Phone Number
Company_1234 John Smith 909-555-1234 Joe Schmo 909-555-2345
Company_2345 Mary Jones 818-555-7894
Company_3456 Kevin Peters 626-555-9632 Steve Wonderful 626-555-7412

我尝试了追加查询,但收到错误“重复目标输出”。这是使用可视化构建器构建的查询的 SQL:

INSERT INTO tbl_NewContact ( [Company ID], [First Name], [Last Name], [First Name], [Last Name] )
SELECT TEST_qry_ContactList.[Company ID], TEST_qry_ContactList.[First Name],  TEST_qry_ContactList.[Last Name], TEST_qry_ContactList.[Alt First Name], TEST_qry_ContactList.[Alt Last Name]
FROM TEST_qry_ContactList;

这样做的原因是将导入的电子表格拆分为多个表格。我有一个带有公司名称和公司 ID 的公司表 (tbl_Company)。我有另一个联系人表(tbl_Contacts),它与公司 ID 处的 tbl_Company 以一对多的关系连接。我有另一个表 (tbl_CoLic) 与公司 ID 处的 tbl_Company 以一对多的关系连接。

我希望看到上面的示例数据以这种方式分解:

Company ID License
Company_1234 A
Company_1234 B
Company_1234 C-10
Company_2345 B
Company_3456 C-35
Company_3456 B
Company_3456 C-05
Company_3456 D-39
Company ID First Name Last Name Phone Number
Company_1234 John Smith 909-555-1234
Company_1234 Joe Schmo 909-555-2345
Company_2345 Mary Jones 818-555-7894
Company_3456 Kevin Peters 626-555-9632
Company_3456 Steve Wonderful 626-555-7412

我不希望为每组数据点构建一堆单独的附加查询,但如果需要的话,我会这样做。

我还看到了一种使用 SQL 数据库和 SQL 编码的方法,但此时此数据库将仅驻留在 Access 中,并且需要使用可在 Access 中编写的代码。

感谢您的帮助,如果需要进一步说明,请告诉我。

【问题讨论】:

【参考方案1】:

使用 UNION 查询将字段重新排列为标准化结构。 SELECT 行的限制为 50 条。第一个 SELECT 行确定字段名称和数据类型。 UNION 没有设计器 - 必须在 SQLView 中键入或复制/粘贴。

对于许可证:

SELECT [Company ID], License1 AS License FROM table
UNION SELECT [Company ID], License2 FROM table
UNION SELECT [Company ID], License3 FROM table;

联系人:

SELECT [Company ID], [First Name], [Last Name], [Office Number] AS Phone, True AS Primary FROM table
UNION SELECT [Company ID], [Alt. First Name], [Alt. Last Name], [Alt. Phone Number], False FROM table;

在其他查询中使用这些数据集或作为插入新表的记录的来源。

强烈建议您从字段命名约定中消除空格和标点符号。

【讨论】:

以上是关于将多列合并为单列[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何在雪花sql中将单列拆分为多列[重复]

Pyspark - 将多列数据组合成跨行分布的单列[重复]

将元素为字典的列拆分为多列[重复]

删除单列和多列同时重复值

如何使用 Qt 将两个单列 csv 文件合并为一个多列 csv 文件? [关闭]

将多列中的列表合并到熊猫中的单列