2012-11-12 127 views
1

我有一個MS Access 2010中的表我試圖分析屬於各種羣體完成各種工作的人。我想要做的是計算每個人每個團隊完成的工作數量的標準偏差。意思是,我想要的結果是,對於每個組,我都會有一個數字,它構成了每個人做了多少工作的標準偏差。Microsoft Access SQL STDEV的數據計數

的數據結構是這樣的:

OldGroup, OldPerson, JobID 

我知道,我需要做的集團和個人的作業ID的COUNT。我試圖創建一個子查詢的工作,但沒有工作:

SELECT data.OldGroup, STDEV(
    SELECT COUNT(data.JobID) 
    FROM data 
    WHERE data.Classification = 1 
    GROUP BY data.OldGroup, data.OldPerson 
) 
FROM data 
GROUP BY data.OldGroup; 

這將返回一個錯誤「最多一個記錄可以通過這個子查詢返回,」我知道錯了,因爲當我試圖要將子查詢作爲獨立查詢運行,它已成功返回多條記錄。

問題: 我怎樣才能得到一個COUNTSTDEV

問題:如果這個問題可以通過更正我的例子中不正確的語法來解決,請這樣做。

+0

它告訴你,你只能返回一個項目(STDEV),但你是'GROUPING BY'。從子查詢中刪除「GROUP BY」,看看是否有效。 – Sablefoste

+0

@SableFoste,在刪除子查詢中的GROUP BY後,Access確實在物理上運行了查詢,但輸出肯定不是正確結果 - 它爲每個記錄返回一個記錄,每個記錄的計算都與'STDEV'。顯然,不同的羣體不應該有相同的標準偏差,所以很明顯在那裏出了問題。 – jdotjdot

回答

0

戰略上的一個小變化不適用於所有情況,但最終爲此工作結束工作似乎解決了這個問題。我沒有在SELECT聲明中粘貼子查詢,而是將它放在FROM中,模仿創建一個單獨的表。

這樣,我的代碼如下所示:

SELECT OldGroup, STDEV(NumberJobs) AS JobsStDev 
FROM (
    SELECT OldGroup, OldPerson, COUNT(JobID) AS NumberJobs 
    FROM data 
    WHERE data.Classification = 1 
    GROUP BY OldGroup, OldPerson 
) AS TempTable 
GROUP BY OldGroup; 

這似乎把工作做好。

0

嘗試對「SELECT COUNT(data.JobID)....」執行最大表查詢。「 然後對於第二個查詢,使用新的基本表。
有時在2個或更多查詢中執行某些操作會更容易。

+0

這就是我現在所做的,但是因爲我必須運行這些中的100個,所以我希望獲得基於子查詢的解決方案。由於這不幸的是在Access(它具有更多有限的SQL功能),所以我不可能輕易地擁有一堆臨時表/變量。 – jdotjdot

+0

如果使用VBA編寫此代碼,則可以動態編寫SQL以創建一個隨機名稱表,例如Guid。所以你要創建表,給它一個唯一的名字,以便其他代碼/用戶不會發生衝突,並在完成後刪除表。 – MatthewMartin

+0

通常(像SQL Server一樣),都可以直接在SQL中完成。使用Access有沒有辦法做到這一點,還是都必須在VBA?如果我不需要,我寧願不碰VBA。 – jdotjdot

相關問題