是否可以获取类似于DISTINCT的记录。我创建了一个包含所有员工姓名和经理姓名的 scriptDB 表单电子表格。我需要获取所有经理的姓名。但事情是经理列确实有重复,因为多个 emp 有相同的经理。
我怎么得到这个?
是否可以获取类似于DISTINCT的记录。我创建了一个包含所有员工姓名和经理姓名的 scriptDB 表单电子表格。我需要获取所有经理的姓名。但事情是经理列确实有重复,因为多个 emp 有相同的经理。
我怎么得到这个?
没有从 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;
}
尽管这个问题是关于使用脚本的,但我将添加第二个完全避免使用脚本的答案。您可以使用内置的电子表格功能提取电子表格中的信息。
假设您的电子表格由 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()
做。
使用上述公式之一的好处是,当您的工作表上的信息发生变化时,它们会自动重新计算。