sql
  • vba
  • ms-access
  • 2014-02-23 122 views 1 likes 
    1

    我有這個查詢來計算我的數據庫表上的數據並將其存儲到一個文本框,然後將其保存到另一個表中存儲計數。我首先將數據存儲到我的文本框中,因爲我需要將計數放在第二個數據庫表上的特定位置。有什麼方法可以簡化這個查詢嗎? :查詢太長

    query = "SELECT (SELECT COUNT (Employee_Name) FROM tblEmployees WHERE Department = 'Revenue Assurance') as [Revenue Assurance]," & _ 
    " (SELECT COUNT (Employee_Name) FROM tblEmployees WHERE Department Like '%Compliance, Fraud Investigation Services%' OR (Department = 'Compliance, Fraud Investigation Services')) as [Compliance, Fraud Investigation Services]," & _ 
    " (SELECT COUNT (Employee_Name) FROM tblEmployees WHERE Department Like '%Compliance, Solutions and Services%' OR (Department = 'Compliance, Solutions and Services')) as [Compliance, Solutions and Services]," & _ 
    " (SELECT COUNT (Employee_Name) FROM tblEmployees WHERE Department = 'Revenue Assurance' AND (P_Level = 'Head (Senior)')) as [txtRAHS]," & _ 
    " (SELECT COUNT (Employee_Name) FROM tblEmployees WHERE Department = 'Revenue Assurance' AND (P_Level = 'Head')) as [txtRAH]," & _ 
    " (SELECT COUNT (Employee_Name) FROM tblEmployees WHERE Department = 'Revenue Assurance' AND (P_Level = 'Sr. Manager')) as [txtRASRMGR]," & _ 
    " (SELECT COUNT (Employee_Name) FROM tblEmployees WHERE Department = 'Revenue Assurance' AND (P_Level = 'Manager')) as [txtRAMGR]," & _ 
    " (SELECT COUNT (Employee_Name) FROM tblEmployees WHERE Department = 'Revenue Assurance' AND (P_Level = 'Sr. Supervisor')) as [txtRASRSUP]," & _ 
    " (SELECT COUNT (Employee_Name) FROM tblEmployees WHERE Department = 'Revenue Assurance' AND (P_Level = 'Supervisor')) as [txtRASUP]," & _ 
    " (SELECT COUNT (Employee_Name) FROM tblEmployees WHERE Department = 'Revenue Assurance' AND (P_Level = 'Jr. Supervisor')) as [txtRAJRSUP]," & _ 
    " (SELECT COUNT (Employee_Name) FROM tblEmployees WHERE Department = 'Revenue Assurance' AND (P_Level = 'Sr. Staff')) as [txtRASRSTF]," & _ 
    " (SELECT COUNT (Employee_Name) FROM tblEmployees WHERE Department = 'Revenue Assurance' AND (P_Level = 'Staff')) as [txtRASTF]," & _ 
    " (SELECT COUNT (Employee_Name) FROM tblEmployees WHERE Department = 'Revenue Assurance' AND (P_Level = 'Jr. Staff')) as [txtRAJRSTF]," & _ 
    " (SELECT COUNT (Employee_Name) FROM tblEmployees WHERE Department = 'Revenue Assurance' AND (P_Level = 'Project Staff')) as [txtRAPS]" & _ 
    '[CFIS] 
    " (SELECT COUNT (Employee_Name) FROM tblEmployees WHERE Department = 'Compliance, Fraud Investigation Services' AND (P_Level = 'Head')) as [txtCFISH]," & _ 
    " (SELECT COUNT (Employee_Name) FROM tblEmployees WHERE Department = 'Compliance, Fraud Investigation Services' AND (P_Level = 'Sr. Manager')) as [txtCFISSRMGR]," & _ 
    " (SELECT COUNT (Employee_Name) FROM tblEmployees WHERE Department = 'Compliance, Fraud Investigation Services' AND (P_Level = 'Manager')) as [txtCFISMGR]," & _ 
    " (SELECT COUNT (Employee_Name) FROM tblEmployees WHERE Department = 'Compliance, Fraud Investigation Services' AND (P_Level = 'Sr. Supervisor')) as [txtCFISSRSUP]," & _ 
    " (SELECT COUNT (Employee_Name) FROM tblEmployees WHERE Department = 'Compliance, Fraud Investigation Services' AND (P_Level = 'Supervisor')) as [txtCFISSUP]," & _ 
    " (SELECT COUNT (Employee_Name) FROM tblEmployees WHERE Department = 'Compliance, Fraud Investigation Services' AND (P_Level = 'Jr. Supervisor')) as [txtCFISJRSUP]," & _ 
    " (SELECT COUNT (Employee_Name) FROM tblEmployees WHERE Department = 'Compliance, Fraud Investigation Services' AND (P_Level = 'Sr. Staff')) as [txtCFISSRSTF]," & _ 
    " (SELECT COUNT (Employee_Name) FROM tblEmployees WHERE Department = 'Compliance, Fraud Investigation Services' AND (P_Level = 'Staff')) as [txtCFISSTF]," & _ 
    " (SELECT COUNT (Employee_Name) FROM tblEmployees WHERE Department = 'Compliance, Fraud Investigation Services' AND (P_Level = 'Jr. Staff')) as [txtCFISJRSTF]," & _ 
    " (SELECT COUNT (Employee_Name) FROM tblEmployees WHERE Department = 'Compliance, Fraud Investigation Services' AND (P_Level = 'Project Staff')) as [txtCFISPS]" & _ 
    '[CSS] 
    " (SELECT COUNT (Employee_Name) FROM tblEmployees WHERE Department = 'Compliance, Solutions and Services' AND (P_Level = 'Head')) as [txtCSSH]," & _ 
    " (SELECT COUNT (Employee_Name) FROM tblEmployees WHERE Department = 'Compliance, Solutions and Services' AND (P_Level = 'Sr. Manager')) as [txtCSSSRMGR]," & _ 
    " (SELECT COUNT (Employee_Name) FROM tblEmployees WHERE Department = 'Compliance, Solutions and Services' AND (P_Level = 'Manager')) as [txtCSSMGR]," & _ 
    " (SELECT COUNT (Employee_Name) FROM tblEmployees WHERE Department = 'Compliance, Solutions and Services' AND (P_Level = 'Sr. Supervisor')) as [txtCSSSRSUP]," & _ 
    " (SELECT COUNT (Employee_Name) FROM tblEmployees WHERE Department = 'Compliance, Solutions and Services' AND (P_Level = 'Supervisor')) as [txtCSSSUP]," & _ 
    " (SELECT COUNT (Employee_Name) FROM tblEmployees WHERE Department = 'Compliance, Solutions and Services' AND (P_Level = 'Jr. Supervisor')) as [txtCSSJRSUP]," & _ 
    " (SELECT COUNT (Employee_Name) FROM tblEmployees WHERE Department = 'Compliance, Solutions and Services' AND (P_Level = 'Sr. Staff')) as [txtCSSSRSTF]," & _ 
    " (SELECT COUNT (Employee_Name) FROM tblEmployees WHERE Department = 'Compliance, Solutions and Services' AND (P_Level = 'Staff')) as [txtCSSSTF]," & _ 
    " (SELECT COUNT (Employee_Name) FROM tblEmployees WHERE Department = 'Compliance, Solutions and Services' AND (P_Level = 'Jr. Staff')) as [txtCSSJRSTF]," & _ 
    " (SELECT COUNT (Employee_Name) FROM tblEmployees WHERE Department = 'Compliance, Solutions and Services' AND (P_Level = 'Project Staff')) as [txtCSSPS]" & _ 
    " From tblEmployees" 
    

    感謝

    +0

    爲什麼按部門和級別的組不計及... –

    +0

    同意@ ta.speot.is,如果這些別名是重要的(txtxxxxx)你在做什麼,你總是可以做一個表存儲它們並將它們與每個部門/級別組合相關聯,以便您在運行此類查詢時加入它。 –

    +0

    嗨,大家好,謝謝。但我如何將他們按部門和級別分組?對不起,這樣的noob :( –

    回答

    2
    select department, p_level, count(*) as num_employees 
    from tblemployees 
    group by department, p_level 
    

    按部門和p_level(所有組合)

    讓員工的數量如果需要對返回的每一行的別名,在創建另一個表你的數據庫三列:

    部門, p_level, count_alias

    將每個部門和p_level組合放到一行中,並將您的別名放到count_alias列中。

    然後,當你運行我給你的查詢時,將tblemployees加入上面的3列表(使用department和p_level)並返回count_alias。

    +0

    嗨@ShWiVeL,對不起,我沒有得到你說的話:(可以解釋一下嗎?)對不起 –

    +0

    但是你的代碼工作 –

    +0

    @JgzTradamus如果這個查詢單獨的結果足夠好你只需要這麼做就可以了,在你的查詢中,你給出了一個獨特的名字(比如txtRASRMGR,txtRAJRSUP等等)到各種不同的部門和p_level組合,我假設你的應用程序在別處使用了別名,所以如果它很重要你可以用這樣一個別名來標識每個計數,你可以創建一個表來存儲別名,然後將它們與這個結果聯繫起來,如果這些別名很重要,那麼你只需要這樣做。 –

    0

    使用SQL IN子句

    例如

    SELECT 
        P_Level, 
        COUNT(Employee_Name) AS COUNT_Employee_Name, 
    FROM tblEmployees 
    WHERE Department = 'Revenue Assurance' 
        AND P_Level IN ('Head (Senior)', 'Head', 'Sr. Manager', 'Manager', 'Sr. Supervisor', 'Supervisor' ...) 
    GROUP BY P_Level 
    
    +0

    與那個查詢在哪裏存儲計數? –

    +0

    @Jgz Tradamus從任何其他SQL查詢返回select select?你在期待什麼? – TFD

    相關問題