0

是否可以获取类似于DISTINCT的记录。我创建了一个包含所有员工姓名和经理姓名的 scriptDB 表单电子表格。我需要获取所有经理的姓名。但事情是经理列确实有重复,因为多个 emp 有相同的经理。

我怎么得到这个?

4

2 回答 2

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;
}
于 2013-03-31T20:41:34.253 回答
0

尽管这个问题是关于使用脚本的,但我将添加第二个完全避免使用脚本的答案。您可以使用内置的电子表格功能提取电子表格中的信息。

假设您的电子表格由 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()做。

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

于 2013-04-01T18:50:58.513 回答