在脚本DB中查询DISTINCT

时间:2013-03-31 12:17:38

标签: google-apps-script

是否可以获取类似于DISTINCT的记录。 我创建了一个包含所有Employee Names和Manager名称的scriptDB表单电子表格。我需要获得所有经理的名字。但事情是经理专栏确实有重复,因为多个emp有同一个经理。

我如何得到这个?

2 个答案:

答案 0 :(得分:1)

没有内置函数可以从ScriptDB中提取部分对象,但这里有一个函数将返回一组唯一的管理器名称。 (我猜测了你的数据结构,根据需要进行调整。)

function distinctManagers() {
  var db = ScriptDb.getMyDb();
  // Get employeers sorted by manager.
  var results = db.query({type: 'employee'}).sortBy('manager', db.LEXICAL);
  var distinctManagers = [];
  while (results.hasNext()) {
    var item = results.next();
    if (distinctManagers.length == 0 || item.manager !== distinctManagers[distinctManagers.length-1]) {
      distinctManagers.push(item.manager);
    }
  }
  debugger;
  return distinctManagers;
}

答案 1 :(得分:0)

虽然问题是关于使用脚本的具体问题,但我会添加第二个完全避免脚本的答案。您可以使用built-in spreadsheet functions

在电子表格中提取信息

假设您的电子表格包含A列中的员工姓名和B列中的经理名称,以下是一些将生成唯一管理员名称列表的函数:

  • =unique(B2:B)按照首次出现的顺序生成一列名称,不包括列标题。使用范围B:B来包含标题。请注意,可能会出现空白名称,因为范围表达式包括B列中的所有内容。

  • =sort(unique(B2:B))如上所述,已排序。

  • =query(A:B, ʺselect count(A) where A != '' pivot Bʺ,true)显示每个经理的员工人数表,已分类。

  • =transpose(query(A:B, ʺselect count(A) where A != '' pivot Bʺ,true))与上一个相同,但经理姓名出现在第一列中。

  • =filter(transpose(query(A:B, ʺselect count(A) where A != '' pivot Bʺ,true)),{true,false})进一步优化了查询,仅包含 管理员名称。看起来就像sort(unique())示例。一个区别:这不会产生空白经理名称; unique()确实如此。

使用上述公式之一的优点是,当工作表上的信息发生变化时,它们会自动重新计算。