如何将表单查询结果折叠成单个单元格?

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

我有一个单子查询,几乎可以达到我想要的目的,但我需要一点帮助来完成最后一步。

=QUERY(Sales!$A$2:$C,"SELECT B, SUM(C) 
WHERE A='"&B3&"' 
GROUP BY B 
ORDER BY SUM(C) DESC 
LIMIT 3 
LABEL SUM(C) '' 
FORMAT SUM(C) '$##,##0' "
,0)

enter image description here 这给我的结果是C3:D4。我想要的是在E3中。我有两个目标。首先输出像E3单元格中那样堆叠和连接的数据。第二,理想的解决方案是在C3中用数组公式为所有的 "伙伴 "做这个工作。示例数据 一如既往地感谢大家的帮助和教育!我有一个sheet查询,几乎可以做到我想要的,但我需要一点帮助来完成最后一步。

google-sheets google-sheets-formula google-sheets-query textjoin
1个回答
1
投票

这是我解决的方法。也许不是最佳解决方案,因为我需要重复计算,但它完全满足我的需要。我已经将我的解决方案添加到了示例数据中。

=REGEXREPLACE(REGEXREPLACE(textjoin(" ♦ ",0, QUERY({Sales!$A$2:$A,Sales!$B$2:$B,Sales!$C$2:$C}, "SELECT Col2, SUM(Col3) WHERE Col1='"&B3&"' GROUP BY Col2 ORDER BY SUM(Col3) DESC LIMIT 3 LABEL SUM(Col3) '' FORMAT SUM(Col3) '$##,##0' " 。 ,0))," ♦ $\$"," = \$")," ♦ ",CHAR(10))

enter image description here


1
投票

实现这一目标的方法之一是创建一个 自定义功能 在谷歌应用脚本中。要实现这一点,请按照以下步骤进行。

  • 在你的电子表格中,选择 工具 > 脚本编辑器 来打开一个绑定到你的文件的脚本。
  • 在脚本编辑器中复制这个函数,然后保存项目。
function GET_TOP_CUSTOMERS(partners) {
  const sheet = SpreadsheetApp.getActive().getSheetByName("Sales");
  const data = sheet.getRange(2, 1, sheet.getLastRow() - 1, 3).getValues();
  return partners.map(row => row[0]).map(partner => {
    const partnerRows = data.filter(row => row[0] === partner);
    const uniqueCustomers = [...new Set(partnerRows.map(row => row[1]))];
    const topCustomers = uniqueCustomers.map(customer => {
      return [customer, partnerRows.filter(row => row[1] === customer)
        .reduce((acc, current) => {
          return acc + current[2] }, 0)];
    }).sort((a,b) => b[1] - a[1]).slice(0, 3);
    return topCustomers.map(customer => customer[0] + "; $" + customer[1].toFixed())
                       .join("\n");
  });
}
  • 现在,如果你回到你的电子表格中,你可以像使用任何内置函数一样使用这个函数。你只需要提供适当的范围(在这种情况下,将是 B3:B12),你可以在这里看到。

enter image description here

参考:

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