2014-01-17 142 views
2

我知道如何做一個計數明顯時,它的簡單是這樣的:MS ACCESS SQL查詢計數DISTINCT

SELECT AllItemsDateRange.Processors.ACH_Processor, COUNT(*) AS NumDays 
FROM (SELECT DISTINCT AllItemsDateRange.Processors.ACH_Processor, AllItemsDateRange.SubmitDate FROM AllItemsDateRange) AS T1 
GROUP BY AllItemsDateRange.Processors.ACH_Processor; 

但是,我不知道如何添加一個計數明顯時,它沒有一個更復雜的查詢影響其他數據。在下面的查詢中,我希望最後一項(NumDays)爲AllItemsDateRange.Processors.ACH_Processor,AllItemsDateRange.SubmitDate的不同計數。

SELECT AllItemsDateRange.Processors.ACH_Processor, AllItemsDateRange.ExposureLimit, AllItemsDateRange.Footprint, Sum(IIf([AllItemsDateRange].[DebitAmount]>0,1,0)) AS Debits, Sum(AllItemsDateRange.DebitAmount) AS DebitAmt, Sum(IIf([AllItemsDateRange].[CreditAmount]>0,1,0)) AS Credits, Sum(AllItemsDateRange.CreditAmount) AS CreditAmt, Sum(IIf(([AllItemsDateRange].[ReturnDate]>0) And ([AllItemsDateRange].[DebitAmount]>0),1,0)) AS DebitReturns, Sum(IIf(([AllItemsDateRange].[ReturnDate]>0) And ([AllItemsDateRange].[CreditAmount]>0),1,0)) AS CreditReturns, Sum(IIf([AllItemsDateRange].[ReturnDate]>0,[AllItemsDateRange].[CreditAmount]+[AllItemsDateRange].[DebitAmount],0)) AS ReturnAmt, Sum(IIf((([AllItemsDateRange].[ReturnCode]="R05") Or ([AllItemsDateRange].[ReturnCode]="R07") Or ([AllItemsDateRange].[ReturnCode]="R10") Or ([AllItemsDateRange].[ReturnCode]="R29") Or ([AllItemsDateRange].[ReturnCode]="R51")) And ([AllItemsDateRange].[DebitAmount]>0),1,0)) AS UnauthorizedReturns, Sum(IIf((([AllItemsDateRange].[ReturnCode]="R05") Or ([AllItemsDateRange].[ReturnCode]="R07") Or ([AllItemsDateRange].[ReturnCode]="R10") Or ([AllItemsDateRange].[ReturnCode]="R29") Or ([AllItemsDateRange].[ReturnCode]="R51")) And ([AllItemsDateRange].[DebitAmount]>0),[DebitAmount],0)) AS UnauthorizedReturnAmt, COUNT(AllItemsDateRange.SubmitDate) AS NumDays 
    FROM AllItemsDateRange 
    GROUP BY AllItemsDateRange.Processors.ACH_Processor, AllItemsDateRange.ExposureLimit, AllItemsDateRange.Footprint 
    ORDER BY AllItemsDateRange.Footprint, AllItemsDateRange.ExposureLimit DESC , AllItemsDateRange.Processors.ACH_Processor DESC; 

編輯: [AllItemsDateRange]基本上是交易的列表。每筆交易都有一個日期。我想通過ACH_Processor彙總數據。因此,獲得借方和貸方的總數和總計很容易。最困難的部分是獲取ACH_Processor處理事務的不同日期的計數,以便稍後可以計算每日平均值。

+0

你想在第二個查詢中的不同計數,只是ACH_Processor計數(*)爲天數? – xQbert

+0

http://stackoverflow.com/questions/11880199/how-do-i-count-unique-items-in-field-in-access-query – xQbert

+0

我基本上想要包含在第二個查詢結果中的第一個查詢(就位的NumDays)。那有意義嗎? – tgro

回答

0

修訂第一個查詢產生的重複計數(NumDays)爲同一GROUP BY作爲第二查詢。

從第二個查詢中刪除NumDays

然後你可以INNER JOIN這兩個字段被包含在GROUP BY中。

但是再次閱讀這個問題,這聽起來像你實際上想爲每個查詢不同的GROUP BY。在這種情況下,將聯接基於包含在兩者中的字段:ACH_Processor

這仍然可以工作,但同一個NumDays值可能會在最後一個查詢的多行中重複。但也許這就是你想要的...

+0

我認爲你在做點什麼。我不確定我完全理解如何實現這一點。我的問題可能是AllItemsDateRange已經是一個連接多個表的查詢。因此,基於查詢編寫查詢可能會讓事情變得過於複雜。我可能需要退後一步並重新考慮表格結構。基本上,我試圖編寫這個查詢,因爲我正在使用一個報告來將所有這些數據結合使用DLOOKUP的某些字段(例如 - NumDays),並且生成時間太長。這個查詢即將在幾秒鐘內完成。 – tgro

+0

我接受了將第一個查詢儘可能接近第二個查詢的建議,然後使用了INNER JOIN。它似乎有效。謝謝你的幫助! – tgro