2013-03-31 86 views
0

是否有可能获取类似DISTINCT记录。 我已经创建了一个scriptDB表格电子表格,其中包含所有员工姓名和经理姓名。我需要获得所有的经理姓名。但事情是管理员列做了重复,因为多个emp有相同的管理器。查询在脚本DB DISTINCT

我该如何得到这个?

回答

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; 
} 
+0

是的,我现在正在做类似的事情。 'var managerList = sheet.getRange('B:B')。getValues();'然后删除重复项,然后用每个经理名称运行ScriptDb查询。问题是我有一个包含〜3000Rows和〜20Cols数据的电子表格。所以我觉得这有点费时,所以检查我们是否有办法直接从ScriptDb做到这一点。 – Srikanth

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()呢。

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

+0

这对我目前的问题没有帮助,因为我确实对scriptDb有依赖性,但是我肯定可以在另一个电子表格中使用它。感谢您解释公式。 – Srikanth