[英]Access query: count values >0
我有一張表,其中列出了項目,它們的優先級(分為2個優先級類別)和它們的狀態。 該表具有以下字段:
我需要有一個針對每種狀態的摘要,我想知道優先級為cat A> 0的項目數和優先級為cat B> 0的項目數。在“結構”視圖中構建查詢結果SQL代碼為:
SELECT MyTable.Status, Count(MyTable.[Priority CatA]) AS [CountCatA], Count(MyTable.[Priority CatB]) AS [CountCatB]
FROM MyTable
GROUP BY MyTable.Status
HAVING (((Count(MyTable.[Priority CatA]))>0) AND ((Count(MyTable.[Priority CatB]))>0));
該查詢的結果不是我想要的,它也計算Priority =0。因此,我嘗試通過這種方式修改HAVING語句中的SQL語句:
HAVING (((MyTable.[Priority CatA])>0) AND ((MyTable.[Priority CatB])>0));
但結果不佳,給出以下錯誤:
“您試圖執行不包含指定表達式作為聚合函數一部分的查詢。(錯誤3122)”
有人能幫助我嗎?
謝謝。
首先,使用WHERE子句在聚合發生之前限制結果。 HAVING
過濾的結果,凝聚了。 使用SQL理解這一點很重要。
同樣,使用iif()
函數對每個字段的查詢的SELECT部分內的>0
檢查。 類似於以下內容應使您接近:
SELECT status, sum(iif([priority catA]>0, 1, 0)) as [CountCatA], sum(iif([priority catB]>0, 1, 0)) as [CountCatB]
FROM MyTable
GROUP BY status;
這兩個計算字段正在檢查以查看每個相應的priority cat
是否大於0
,如果是,則返回1
。 然后將1
相加,按status
分組。
我認為您需要條件聚合:
SELECT MyTable.Status,
SUM(IIF([Priority CatA] > 0, 1, 0)) as CountCatA,
SUM(IIF([Priority CatB] > 0, 1, 0)) as CountCatB
FROM MyTable
GROUP BY MyTable.Status;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.