sql - 通过将值移动到新列来合并准重复行
问题描述
我有一个包含数千行的表,看起来有点像这样:
姓名 | 子文本 | 子代码 | 其他数据 |
---|---|---|---|
一个 | 文本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_text
和sub_code
值不同。对于这 4 或 2 行,有数十other_data
列(人的 ID、出生日期和地点等)是相同的。还有一些行没有任何重复项,在这种情况下,sub_text
andsub_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 做更多的事情。我不知道如何解决这个问题。有任何想法吗?
解决方案
在 Windows Excel 2010+ 和 Office 365 中可用的 Power Query 中,您可以通过以下方式轻松完成此操作
- 按重复的列分组(
name
在other_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"
推荐阅读
- google-cloud-run - “Cloud Run 错误:容器无法启动。无法启动并监听 PORT 环境变量定义的端口。”
- python - 将十进制值四舍五入到矩阵中最接近的整数
- java - 使用 aspose 库在 Java 中将 Excel 文件另存为 Word
- sql - Postgres查询:从两个不同的行中选择列上具有最大值的行
- cython - Cython 的 cdef 函数使用临时数组,是否需要删除/释放?
- python - influxdb 中的时间以 UTC 为单位,我应该为 UTC+3 做什么?
- python - 尝试在 virtualenv 中安装 pyodbc 时出错
- animation - Max Script:检测相同的帧
- symfony - 如何禁用非映射字段的 symfony 验证
- python - 保留数据比指定时间更新的行