2013-03-31 129 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