首页 > 解决方案 > 通过将值移动到新列来合并准重复行

问题描述

我有一个包含数千行的表,看起来有点像这样:

姓名 子文本 子代码 其他数据
一个 文本1 代码1 a_data
一个 文本2 代码2 a_data
一个 文本3 代码3 a_data
一个 文本4 代码4 a_data
b 文本1 代码1 b_data
b 文本2 代码2 b_data
C c_data

这些记录代表人,其中一些有 4 或 2 行,其中只有sub_textsub_code值不同。对于这 4 或 2 行,有数十other_data列(人的 ID、出生日期和地点等)是相同的。还有一些行没有任何重复项,在这种情况下,sub_textandsub_code值为空。

我想把这张表转换成这样的:

姓名 sub_text1 sub_text2 sub_text3 sub_text4 子代码1 子代码2 子代码3 子代码4 其他数据
一个 文本1 文本2 文本3 文本4 代码1 代码2 代码3 代码4 a_data
b 文本1 文本2 代码1 b_data
C c_data

我需要对记录进行排序“合并”,因此通过将唯一不同的值添加到新列中,一个人只有一条记录other_data,同时保持字段和只有一条记录的人不受影响。

这最初是一个 Excel 表,我还需要 Excel 中的“转换”表。我不认为 Excel 可以做这样的事情,所以我创建了一个数据库(我现在只在 Access 中拥有它)希望我可以用 SQL 做更多的事情。我不知道如何解决这个问题。有任何想法吗?

标签: sqlexcelms-access

解决方案


在 Windows Excel 2010+ 和 Office 365 中可用的 Power Query 中,您可以通过以下方式轻松完成此操作

  • 按重复的列分组(nameother_data您的示例中)
  • 然后将组合的子表代码和文本列提取到分隔列表中
  • 将该列表拆分为新列

使用 Power Query

  • 在数据表中选择一些单元格
  • Data => Get&Transform => from Table/Range
  • 当 PQ 编辑器打开时:Home => Advanced Editor
  • 记下第 2 行中的表
  • 粘贴下面的 M 代码代替您看到的内容
  • 将第 2 行中的表名称更改回最初生成的名称。
  • 阅读评论并探索Applied Steps以了解算法

M-代码

let
    Source = Excel.CurrentWorkbook(){[Name="Table10"]}[Content],

//Group by Name and Other Data
//  extract a delimited list of the sub_text and sub_codes
    #"Grouped Rows" = Table.Group(Source, {"name", "other_data"}, {
        {"sub_text", each Text.Combine([sub_text],";"), type text},
        {"sub_code", each Text.Combine([sub_code],";"), type text}    
        }),

//split the delimited lists into separate columns.
    #"Split Column by Delimiter" = Table.SplitColumn(#"Grouped Rows", "sub_text", 
                Splitter.SplitTextByDelimiter(";", QuoteStyle.Csv)),
    #"Split Column by Delimiter1" = Table.SplitColumn(#"Split Column by Delimiter", "sub_code", 
                Splitter.SplitTextByDelimiter(";", QuoteStyle.Csv))
in
    #"Split Column by Delimiter1"

在此处输入图像描述


推荐阅读