我正在尝试构建一个函数,其中基于日期和名称返回某些条目。
John 10/10/18 A A A
Joe 10/10/18 A B A
John 10/10/18 A B C
John 10/11/18 A C A
Joe 10/11/18 A C C
我希望能够获得一列:
> John - 10/10/18 1) A A A 2) A B C 3) A B C
>
> Joe - 10/10/18 1) A B A
>
> etc
我的想法是使用unique()查找唯一的日期和唯一的名称,然后在查询中使用它们。
我的功能如下:
=query('Sample List'!$F3:AB, "select X where F = '"&A2&"' and W = '"&B2&"'" )
不幸的是,它不起作用。名称部分可以正常工作,但是日期B2的第二部分不起作用。这是令人困惑的,因为日期的格式完全相同,因此无需进行任何转换。当我将数字视为整数时,它们是完全相同的。
我尝试了各种变化:
=QUERY('Sample List'!$F3:AB,"select X where W = '"&TEXT(A2,"yyyy-mm-dd")&"'")
=QUERY('Sample List'!$F3:AB,"select X where W = date'"&B2&"'")
但是,运行查询时,不执行。知道为什么吗?
答案 0 :(得分:0)
部分问题是Google表格中没有string_agg()
函数,该函数存在于数据库的SQL中。这使得基于文本值而非查询中的数字值进行聚合/分组更加困难。
下面是一种可以帮助您实现所需目标的方法。它是分步完成的,您也许可以以此为基础进行自己的改进。
从A到E列开始(在我的测试表中,从第48行开始)
John 10/10/18 A A A
Joe 10/10/18 A B B
John 10/10/18 A B C
John 10/11/18 A C C
Joe 10/11/18 A C C
使用公式=textjoin(" ",FALSE,A48:B48)
和=textjoin(" ",FALSE,C48:E48)
您可以在下面的A和B栏得到它。
John 10/10/18 A A A
Joe 10/10/18 A B B
John 10/10/18 A B C
John 10/11/18 A C C
Joe 10/11/18 A C C
然后在A栏下面使用公式=sort(unique(A54:A58))
在B列中使用公式=join(" , ",filter(B$54:B$58,A$54:A$58=A60))
(向下拖动以进行复制),您将获得A列和B列的下方。
Joe 10/10/18 A B B
Joe 10/11/18 A C C
John 10/10/18 A A A , A B C
John 10/11/18 A C C
现在使用=textjoin(" : ",FALSE,A60:B60)
加入这些列,您将获得ColA
Joe 10/10/18 : A B B
Joe 10/11/18 : A C C
John 10/10/18 : A A A , A B C
John 10/11/18 : A C C
接近您想要的东西。
我认为最好在Javascript脚本中解决此类问题。
但是,您可以更好地将各个部分结合起来以减少步骤并尽可能使用arrayformula版本。