将列中的重复行合并为逗号分隔值 - Google 查询
Combine duplicate rows in column as comma separated values - Google Query
如果我有 2 列,即 ID 和名称,ID 列包含重复项,并且如果我想按 ID 分组以获得唯一 ID 但名称列应该是逗号分隔的列表,这是否可能在Google查询?
| ID | Name |
===============
| 1001 | abc |
---------------
| 1001 | def |
---------------
| 1002 | kjg |
---------------
| 1003 | aof |
---------------
| 1003 | lmi |
---------------
| 1004 | xyz |
---------------
进入
| ID | Name |
====================
| 1001 | abc, def |
--------------------
| 1002 | kjg |
--------------------
| 1003 | aof, lmi |
--------------------
| 1004 | xyz |
--------------------
我查看了查询规范。我找不到解决办法。所以我做了一些公式来完成这项工作(因为我发现这个任务很有趣)。
D2 包含 =unique(a2:a)
E2 包含=join(", ",transpose(filter($B:$B,$A:$A=D2)))
并且复制下来。
我不得不把公式抄下来(远不是漂亮的公式)
希望对您有所帮助。
参考
这是一个使用“QUERY”的答案。
=ARRAYFORMULA(REGEXREPLACE(TRIM(SPLIT(TRANSPOSE(SPLIT(
CONCATENATE(TRANSPOSE(QUERY({"♦"&A2:A&"♠", B2:B&", "},
"select max(Col2) where Col2 is not null group by Col2 pivot Col1", 0))),
"♦")), "♠")), ",$", ))
这直接来自 。
Player0 的答案只有惊人的公式,能够以多种方式重组数据。
尝试:
=ARRAYFORMULA({QUERY(QUERY({A2:B, B2:B},
"select Col1,max(Col2)
where Col1 is not null
group by Col1
pivot Col3"),
"select Col1
offset 1", 0), REGEXREPLACE(TRIM(
TRANSPOSE(QUERY(TRANSPOSE(QUERY(QUERY({A2:B&",", B2:B},
"select max(Col2)
where Col1 is not null
and Col2 <> ','
group by Col1
pivot Col3"),
"offset 1", 0)),,999^9))), ",$", )})
但是,由于 TRIM
(需要删除空格)和 REGEXREPLACE
(需要删除结尾逗号)限制,这可能不适用于大量数据集。否则,没有它,公式可以处理任何事情:
=ARRAYFORMULA({QUERY(QUERY({A2:B, B2:B},
"select Col1,max(Col2)
where Col1 is not null
group by Col1
pivot Col3"),
"select Col1
offset 1", 0),
TRANSPOSE(QUERY(TRANSPOSE(QUERY(QUERY({A2:B&",", B2:B},
"select max(Col2)
where Col1 is not null
and Col2 <> ','
group by Col1
pivot Col3"),
"offset 1", 0)),,999^9))})
如果您可以接受输出中出现的结尾逗号,您可以尝试:
=ARRAYFORMULA({QUERY(QUERY({A2:B, B2:B},
"select Col1,max(Col3)
where Col1 is not null
and Col3 <> ','
group by Col1
pivot Col2"),
"select Col1 offset 1", 0),
TRANSPOSE(QUERY(TRANSPOSE(IFERROR(VLOOKUP(QUERY(QUERY({A2:B, B2:B},
"select Col1,max(Col3)
where Col1 is not null
and Col3 <> ','
group by Col1
pivot Col2"),
"select Col1 offset 1", 0),
QUERY(QUERY({A2:B, B2:B&","},
"select Col1,max(Col3)
where Col1 is not null
and Col3 <> ','
group by Col1
pivot Col2"),
"offset 1", 0),
SPLIT(TRANSPOSE(QUERY(TRANSPOSE(IF(QUERY(QUERY({A2:B, B2:B&","},
"select max(Col3)
where Col1 is not null
and Col3 <> ','
group by Col1
pivot Col2"),
"offset 1", 0)="",,COLUMN(B2:XXX)&",")),,999^99)), ","), 0))),,999^99))})
(虽然这从未在超大规模数据集上进行过测试,但理论上它也应该处理任何事情)
如果我有 2 列,即 ID 和名称,ID 列包含重复项,并且如果我想按 ID 分组以获得唯一 ID 但名称列应该是逗号分隔的列表,这是否可能在Google查询?
| ID | Name |
===============
| 1001 | abc |
---------------
| 1001 | def |
---------------
| 1002 | kjg |
---------------
| 1003 | aof |
---------------
| 1003 | lmi |
---------------
| 1004 | xyz |
---------------
进入
| ID | Name |
====================
| 1001 | abc, def |
--------------------
| 1002 | kjg |
--------------------
| 1003 | aof, lmi |
--------------------
| 1004 | xyz |
--------------------
我查看了查询规范。我找不到解决办法。所以我做了一些公式来完成这项工作(因为我发现这个任务很有趣)。
D2 包含 =unique(a2:a)
E2 包含=join(", ",transpose(filter($B:$B,$A:$A=D2)))
并且复制下来。
我不得不把公式抄下来(远不是漂亮的公式) 希望对您有所帮助。
参考
这是一个使用“QUERY”的答案。
=ARRAYFORMULA(REGEXREPLACE(TRIM(SPLIT(TRANSPOSE(SPLIT(
CONCATENATE(TRANSPOSE(QUERY({"♦"&A2:A&"♠", B2:B&", "},
"select max(Col2) where Col2 is not null group by Col2 pivot Col1", 0))),
"♦")), "♠")), ",$", ))
这直接来自
尝试:
=ARRAYFORMULA({QUERY(QUERY({A2:B, B2:B},
"select Col1,max(Col2)
where Col1 is not null
group by Col1
pivot Col3"),
"select Col1
offset 1", 0), REGEXREPLACE(TRIM(
TRANSPOSE(QUERY(TRANSPOSE(QUERY(QUERY({A2:B&",", B2:B},
"select max(Col2)
where Col1 is not null
and Col2 <> ','
group by Col1
pivot Col3"),
"offset 1", 0)),,999^9))), ",$", )})
但是,由于 TRIM
(需要删除空格)和 REGEXREPLACE
(需要删除结尾逗号)限制,这可能不适用于大量数据集。否则,没有它,公式可以处理任何事情:
=ARRAYFORMULA({QUERY(QUERY({A2:B, B2:B},
"select Col1,max(Col2)
where Col1 is not null
group by Col1
pivot Col3"),
"select Col1
offset 1", 0),
TRANSPOSE(QUERY(TRANSPOSE(QUERY(QUERY({A2:B&",", B2:B},
"select max(Col2)
where Col1 is not null
and Col2 <> ','
group by Col1
pivot Col3"),
"offset 1", 0)),,999^9))})
如果您可以接受输出中出现的结尾逗号,您可以尝试:
=ARRAYFORMULA({QUERY(QUERY({A2:B, B2:B},
"select Col1,max(Col3)
where Col1 is not null
and Col3 <> ','
group by Col1
pivot Col2"),
"select Col1 offset 1", 0),
TRANSPOSE(QUERY(TRANSPOSE(IFERROR(VLOOKUP(QUERY(QUERY({A2:B, B2:B},
"select Col1,max(Col3)
where Col1 is not null
and Col3 <> ','
group by Col1
pivot Col2"),
"select Col1 offset 1", 0),
QUERY(QUERY({A2:B, B2:B&","},
"select Col1,max(Col3)
where Col1 is not null
and Col3 <> ','
group by Col1
pivot Col2"),
"offset 1", 0),
SPLIT(TRANSPOSE(QUERY(TRANSPOSE(IF(QUERY(QUERY({A2:B, B2:B&","},
"select max(Col3)
where Col1 is not null
and Col3 <> ','
group by Col1
pivot Col2"),
"offset 1", 0)="",,COLUMN(B2:XXX)&",")),,999^99)), ","), 0))),,999^99))})
(虽然这从未在超大规模数据集上进行过测试,但理论上它也应该处理任何事情)