Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google sheets 将列中的重复行合并为逗号分隔的值-Google查询_Google Sheets_Google Query Language - Fatal编程技术网

Google sheets 将列中的重复行合并为逗号分隔的值-Google查询

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,ID列包含重复项,并且如果我想按ID分组以获得唯一的ID,但Name列应该是逗号分隔的列表,那么在googlequery中可以这样做吗

| 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))})