Google Sheets单QUERY公式实现SKU分组多维度数据提取需求
Google Sheets 按SKU分组聚合解决方案
这个需求完全可行,虽然单独用QUERY函数无法覆盖所有要求,但结合Google Sheets的其他函数可以实现完整功能。以下是具体公式和说明:
完整公式
假设数据范围为A2:E(表头在A1:E1),公式如下:
=ARRAYFORMULA( LET( grouped_data, QUERY(A2:E, "SELECT A, SUM(B), MIN(C), MAX(C) WHERE A IS NOT NULL GROUP BY A LABEL SUM(B)'Incoming PO总和', MIN(C)'首次采购日期', MAX(C)'最新采购日期'"), sku_list, INDEX(grouped_data,,1), latest_purchase_dates, INDEX(grouped_data,,4), latest_costs, VLOOKUP(sku_list&latest_purchase_dates, {A2:A&C2:C, D2:D}, 2, 0), supplier_prefixes, BYROW(sku_list, LAMBDA(sku, TEXTJOIN(", ", TRUE, UNIQUE(LEFT(FILTER(E2:E, A2:A=sku), 3))))), HSTACK(grouped_data, latest_costs, supplier_prefixes) ) )
公式拆解说明
grouped_data:通过QUERY完成基础分组聚合,计算每个SKU的:SUM(B):Incoming PO总和MIN(C):首次采购日期MAX(C):最新采购日期(用于后续匹配最新成本)
latest_costs:通过VLOOKUP匹配每个SKU最新采购日期对应的成本,避免直接取MAX(D)导致的成本与日期不匹配问题supplier_prefixes:遍历每个SKU,过滤出对应供应商,提取名称前3个字符,去重后用逗号分隔合并(如果不需要去重,可删除UNIQUE函数)HSTACK:将所有结果横向合并,输出完整的分组数据
注意事项
如果需要将供应商前缀横向转置为多列(而非合并成字符串),可将supplier_prefixes部分修改为:
supplier_prefixes, BYROW(sku_list, LAMBDA(sku, TRANSPOSE(UNIQUE(LEFT(FILTER(E2:E, A2:A=sku), 3)))))
但这种方式会导致结果列数不固定,需根据实际需求选择。
内容的提问来源于stack exchange,提问作者Michel
相关产品推荐
相关产品推荐

