背景:
正在使用 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 可能会被跳过。
我不知道我是否完全理解你的情况;但我建议您深入 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! 表的查询)转换为另一个过滤公式,但如果它检索正确的值,那么那就没有问题了