使用Query命令提取,比较和列​​出数据

时间:2015-09-21 07:16:34

标签: spreadsheet

我举办音乐节,票务提供商提供的数据布局极差,采用垂直合并的电子表格格式。根据这些数据,我们使用谷歌表格从其他节日票类型中提取野营票,然后分配野营帐篷号码。建议的解决方案是:

1:使用查询命令提取野营地票:

=QUERY(TicketData!A1:S50000, "Select C,D,E, F, G,N, S where I contains 'Season Shared Camping - 10 man tent'Order By C"). 

但是Query命令还必须:

2:将结果与现有分配的静态表格进行比较

3:仅显示不在静态现有分配表中的条目。

因此,查询命令现在仅显示需要采取行动的新的未分配的露营车票购买。一旦放入静态工作表,该条目将自动从查询表中删除,因为它现在存在于两个工作表中。

唯一标识符是C列,包含标识是否是露营票的文本字符串的列是S列。

谢谢

1 个答案:

答案 0 :(得分:1)

我认为你有这个downvote,因为这不是一个excel问题,但它被标记为如此。无论哪种方式,我认为我有一个解决方案。

将复杂的需求写入查询字符串有时会非常困难,因为它通常需要转义字符串并编织单元格引用等。您可以做的是在查询公式的“数据”部分中执行部分工作,然后使用查询字符串仅选择所需的列。

我是通过使用= FILTER和COUNTIF:

完成的

第1步:使用“季节共享...”字符串过滤TicketData,使用静态值过滤:

=FILTER(TicketData!A:S, TicketData!I:I = "Season Shared Camping - 10 man tent", COUNTIF(TicketData!C:C, Static!C:C) > 0)

步骤2:将此绑定到Query中,将上面的Filter替换为Query的数据部分。我们需要将列称为Col1,Col2等,所以它看起来像这样:

=QUERY(FILTER(TicketData!A:S, TicketData!I:I = "Season Shared Camping - 10 man tent", COUNTIF(TicketData!C:C, Static!C:C) > 0), "select Col3, Col4, Col5, Col6, Col7, Col14, Col19")

我在一些模拟数据上尝试了这个,它对我有用。让我知道你是怎么过的。

编辑:查看评论中的数据后,看起来我的过滤器需要进行一些更改,因为静态列表与其他过滤器数据的长度不同。我通过将所有静态ID连接在一起(逗号分隔)然后使用FIND公式来解决这个问题。如果它没有找到任何东西,它会被ISERR公式拾取并在过滤器中出现:

=QUERY(FILTER(TicketData!A:S, TicketData!I:I = $C$2, ISERR(FIND(TicketData!C:C, CONCATENATE(TRANSPOSE(Shared!A:A&","))))), "select Col3, Col4, Col5, Col6, Col7, Col19")

您可以通过clicking here.

提供的公开数据查看此信息