2017-01-09 85 views
0

我有一個表的項目列表,他們的優先級(分爲2類優先級)及其狀態。該表具有以下字段:訪問查詢:計數值> 0

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

我需要有一個總結是對各狀態,我想知道優先級爲cat A> 0的項目的數量和優先級爲cat B> 0的項目的數量。 在Structure視圖中構建查詢,結果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)); 

此查詢的結果是不是我想要的,它計數也優先級= 0 於是,我就修改SQL語句的HAVING句話這樣說:

HAVING (((MyTable.[Priority CatA])>0) AND ((MyTable.[Priority CatB])>0)); 

但結果並不好,給出以下錯誤:

「試圖執行一個查詢,不包括指定表達式爲聚合函數的一部分。 (錯誤3122)」

有人可以幫我嗎?

謝謝。

回答

0

首先,使用聚合發生之前WHERE子句來限制你的結果。HAVING過濾的結果,凝聚了。這是一個。重要的是要了解與SQL

而且,使用iif()功能做你檢查的>0查詢每個字段的SELECT部分​​內類似下面應該讓你接近:

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 cat0更大,如果是的話則返回1。那1然後求和,在status分組。

+0

非常感謝你,它幫助! –

0

我想你想要有條件聚集:

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; 
+0

同樣謝謝你,JNevill的回答是,它非常有幫助「 –