簡體   English   中英

訪問查詢:計數值> 0

[英]Access query: count values >0

我有一張表,其中列出了項目,它們的優先級(分為2個優先級類別)和它們的狀態。 該表具有以下字段:

  • 項目名
  • 狀態
  • 優先級A
  • 優先類型B

我需要有一個針對每種狀態的摘要,我想知道優先級為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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM