查询转置查找 - 返回结果

问题描述 投票:0回答:1

背景:

正在使用 Google 表格。

我有大量(>10k 行)无组织的数据表,其中包含 ID 和值,我试图返回给定 ID 的值。我没有能力对数据进行排序,这样做也不会节省时间(我怀疑)。

数据格式为:

蓝图ID 活动ID 材质ID 数量
1 1 50 1
2 2 51 2

但该数据表中可能是无序的,例如:

蓝图ID 活动ID 材质ID 数量
5 3 64 13
1 1 22 5

问题:

我正在另一张表中查找值,以对输出执行数学/财务运算。 我可以控制我正在使用的这张表。

我当前的数据格式如下:

商品ID 材质ID - 1 材质ID - 2 材质ID - 3 材料 ID - n
1
2
3

我编写了以下公式来查找给定 ItemID/MatierialID 的材料值:

=TRANSPOSE(QUERY(Materials!A:D,"Select D where A matches '"&QUERY(Items!A:C,"Select A where C matches '"&ItemID&"'",0)&"' and B = 1",0))

代码说明: 对于给定的 ItemID,查询该 Item 的表以返回 BlueprintID。 BlueprintID 在材质表中用于选择与蓝图 ID 匹配的给定材质值。

原始输出示例: | 80000 | 15000 | 5000 | 1000 |

但是,输出取决于材料表中值的顺序。

所以可以看起来像: | 1000 | 1000 5000 | 15000 | 30000 |

问题:

我的公式是否可以重写或修改,以便仅按照我要返回值的 MaterialID 表指定的顺序返回值。

令人困惑的问题是并非所有物品都使用所有材料。 不同材质 ID 之间可能存在多个间隙

我的想法: 修改查询/转置以返回通过引用材料 ID 排序的结果。

我怀疑索引/匹配可能有用,但在编写新公式方面我遇到了一些障碍。

如有任何帮助,我们将不胜感激!

我做了什么 - 见上文。简单回顾一下:

写出以下公式:

=TRANSPOSE(QUERY(Materials!A:D,"Select D where A matches '"&QUERY(Items!A:C,"Select A where C matches '"&ItemID&"'",0)&"' and B = 1",0))

返回正确的值,但顺序不正确,因为包含原始数据的主工作表是无序的。

此外,并非所有物品都需要所有材料,并且某些材料 ID 可能会被跳过。

google-sheets lookup transpose google-query-language
1个回答
0
投票

我不知道我是否完全理解你的情况;但我建议您深入 FILTER 以按原始顺序获取值:

=TRANSPOSE(FILTER(Materials!D:D,  Materials!A:A=QUERY(Items!A:C,"Select A where C matches '"&ItemID&"'",0),  Materials!B:B=1))

您还可以将内部查询(来自 Items! 表的查询)转换为另一个过滤公式,但如果它检索正确的值,那么那就没有问题了

© www.soinside.com 2019 - 2024. All rights reserved.