将多列合并为单列[重复]
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;
在其他查询中使用这些数据集或作为插入新表的记录的来源。
强烈建议您从字段命名约定中消除空格和标点符号。
【讨论】:
以上是关于将多列合并为单列[重复]的主要内容,如果未能解决你的问题,请参考以下文章