Google sheets 将列中的重复行合并为逗号分隔的值-Google查询
如果我有两列,即,ID&Name,ID列包含重复项,并且如果我想按ID分组以获得唯一的ID,但Name列应该是逗号分隔的列表,那么在googlequery中可以这样做吗Google sheets 将列中的重复行合并为逗号分隔的值-Google查询,google-sheets,google-query-language,Google Sheets,Google Query Language,如果我有两列,即,ID&Name,ID列包含重复项,并且如果我想按ID分组以获得唯一的ID,但Name列应该是逗号分隔的列表,那么在googlequery中可以这样做吗 | ID | Name | =============== | 1001 | abc | --------------- | 1001 | def | --------------- | 1002 | kjg | --------------- | 1003 | aof | --------------- | 100
| ID | Name |
===============
| 1001 | abc |
---------------
| 1001 | def |
---------------
| 1002 | kjg |
---------------
| 1003 | aof |
---------------
| 1003 | lmi |
---------------
| 1004 | xyz |
---------------
进入
我浏览了查询规范。我找不到解决办法。所以我做了一些公式来做这项工作,因为我觉得这个任务很有趣。 D2包含=唯一A2:a E2包含=join,transposefilter$B$2:$B,$A$2:$A=D2,并将其向下复制 我不得不把公式复制到远离美丽公式的地方 希望对您有所帮助 参考
我浏览了查询规范。我找不到解决办法。所以我做了一些公式来做这项工作,因为我觉得这个任务很有趣。 D2包含=唯一A2:a E2包含=join,transposefilter$B$2:$B,$A$2:$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的答案只是惊人的公式,能够以多种方式重新组织数据
下面是一个使用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(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))})
虽然这从未在超大数据集上测试过,但从理论上讲,它应该也能处理任何事情,如果你能接受输出中的结尾逗号,你可以尝试:
=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))})
虽然这从未在超大数据集上测试过,但从理论上讲,它应该可以处理任何事情,实际上我不这么认为。但它可以通过标准公式得到。如果你对这种解决方案感兴趣的话,请告诉我。嗯……希望谷歌查询能与Textjoin等功能混合使用。我很确定使用Query/Textjoin/split/等可以实现。我会试试看……Textjoin的字符限制为50000个,Split。我认为使用未记录的展平函数应该可以克服这个限制。实际上我不这么认为。但它可以通过标准公式得到。如果你对这种解决方案感兴趣的话,请告诉我。嗯……希望谷歌查询能与Textjoin等功能混合使用。我很确定使用Query/Textjoin/split/等可以实现。我会试试看……Textjoin的字符限制为50000个,拆分。我认为使用未记录的展平函数应该可以克服这个限制。我得到的连接文本结果超过50000个字符的限制。这是样本数据还是生产表?A列和B列中有多少行数据?A或B中的值是大文本块吗?这可以解释这个错误。有可能重新开发此公式以避免此问题。这与包含6K行的生产工作表有关。我得到的连接文本结果超过50000个字符的限制。这是示例数据还是您的生产工作表?A列和B列中有多少行数据?A或B中的值是大文本块吗?这可以解释这个错误。这个公式有可能被重新开发以避免这个问题。这是与我的生产表,其中包含6K行。非常巧妙的答案!这就是我所说的纯粹的才华。谢谢。我确信,没有select语句和大量头的查询就成功了。我主要对偏移量1感到困惑。你能解释公式的全部工作原理吗?@sifar查询以第三列为轴,因此查询将第三列作为标题行编号1输出,这是完全不必要的,因此我们使用偏移量1将整个查询输出偏移1行,从而删除标题行轴剩余。这是一个非常巧妙的答案!这就是我所说的纯粹的才华。谢谢。我确信,没有select语句和大量头的查询就成功了。我主要对偏移量1感到困惑。您能解释公式的整个工作原理吗?@sifar查询以第三列为轴,因此查询将第三列作为标题行编号1输出,这是完全不必要的,因此我们使用偏移量1将整个查询输出偏移1行,从而删除标题行轴剩余!明亮的我会在早上用一个更大的数据集检查它。你能帮我吗?哇!明亮的我会在早上用一个更大的数据集检查它。你能帮我吗?
=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))})