2016-01-07 129 views
1

編輯:請參閱下面的新信息,在更新訪問2010 - SQL查詢 - 計數Iif聯盟所有錯誤

我有一個有4個表的Access數據庫:表1,2,3和4. 每個表有4列:ID,日期,名稱和項目。

我試圖設計一個查詢,它會根據日期和名稱對產品列中的唯一值進行計數。例如,當我運行查詢時,它應該顯示日期,個人姓名以及適用聯繫人的「項目」列中單詞「Apple」出現次數的總計數。

我使用的是計數Iif來計算出現次數並聯合所有結合我的表。 (示例代碼如下)

問題: 我的查詢只提供一個來自兩個表的計數,而不是全部四個。我無法確定爲什麼,需要幫助來隔離問題。 我現在能夠獲得信息來統計所有四個表中的數據(通過從頭開始重新創建它,感嘆)。但是,現在它爲每桌提供了總數,我希望它能夠從所有4個表中提供總計。例如:當我想查詢/報告只給我蘋果總數(6)時,它向我展示了表1的總共1個蘋果,表2的3個蘋果,表3的3個蘋果。我可能在這裏忽略了一些東西。

更新:我決定創建一個全新的虛擬信息數據庫,並手動重新輸入代碼(以安撫老神)並......它的工作原理。這個問題在技術上已經解決了。我現在必須弄清楚爲什麼它不給我一個「總數」。

下面是SQL的一個例子:

SELECT Table1.Date, Table1.Name, Count(IIf([Table1]![Item]="Apples",1,Null)) AS CountApples, Count(IIf([Table1]![Item]="Oranges",1,Null)) AS CountOranges, Count(IIf([Table1]![Item]="Pears",1,Null)) AS CountPears 
FROM Table1 
GROUP BY Table1.Date, Table1.Name 
HAVING (((Table1.Date) Between [SS/SS/SS] And [EE/EE/EE]) AND ((Table1.Name) Like [Name])) 
UNION ALL 
SELECT Table2.Date, Table2.Name, Count(IIf([Table2]![Item]="Apples",1,Null)) AS CountApples, Count(IIf([Table2]![Item]="Oranges",1,Null)) AS CountOranges, Count(IIf([Table2]![Item]="Pears",1,Null)) AS CountPears 
FROM Table2 
GROUP BY Table2.Date, Table2.Name 
HAVING (((Table2.Date) Between [SS/SS/SS] And [EE/EE/EE]) AND ((Table2.Name) Like [Name])) 
UNION ALL 
SELECT Table3.Date, Table3.Name, Count(IIf([Table3]![Item]="Apples",1,Null)) AS CountApples, Count(IIf([Table3]![Item]="Oranges",1,Null)) AS CountOranges, Count(IIf([Table3]![Item]="Pears",1,Null)) AS CountPears 
FROM Table3 
GROUP BY Table3.Date, Table3.Name 
HAVING (((Table3.Date) Between [SS/SS/SS] And [EE/EE/EE]) AND ((Table3.Name) Like [Name])) 
UNION ALL 
SELECT Table4.Date, Table4.Name, Count(IIf([Table4]![Item]="Apples",1,Null)) AS CountApples, Count(IIf([Table4]![Item]="Oranges",1,Null)) AS CountOranges, Count(IIf([Table4]![Item]="Pears",1,Null)) AS CountPears 
FROM Table4 
GROUP BY Table4.Date, Table4.Name 
HAVING (((Table4.Date) Between [SS/SS/SS] And [EE/EE/EE]) AND ((Table4.Name) Like [Name])); 
+0

你的「分組依據」的樣品表2中有「Table1.Name」。這應該有效果,但我沒有看到任何其他錯誤。我會檢查你的實際代碼是否有類似的問題。 – PKatona

+0

感謝PKatona。我仔細檢查了原始語法,發現沒有錯誤。我也刪除並重新創建了數據庫並進行查詢,看看這是否只是一個Access怪癖。遺憾的是沒有解決這個問題。 –

+0

你是否分別運行每個查詢來驗證結果? – PKatona

回答

0

糟糕!

我做了一些更多的研究,事實證明你的語法工作得很好。所以:

SUM(IIf([Table4]![Item]="Apples",1,0)) AS CountApples 

等同於:

Count(IIf([Table4]![Item]="Apples",1,Null)) AS CountApples 

無論哪種方式,適用於接入,以及SQL Server中,並通過包含空值字段數據。選擇一個的唯一原因是可讀性。

所以,這不是一個有用的答案,你應該取消選中它。

(舊下面的答案)


吸引力,因爲它可能是,在這種情況下使用COUNT()將無法​​正常工作。 相反,使用:

SUM(IIf([Table4]![Item]="Apples",1,0)) AS CountApples 

這將返回你是經過正確的結果。

PS:使用COUNT([Field])將只計算[Field]中的非空值,因此您的一般想法是正確的。但是,正如你所示,COUNT()不夠聰明,可以和IIf()聲明做同樣的事情。

+0

謝謝Kismert。這是很棒的信息。我已將所有內容切換爲Sum。今晚我還在進行一些不同的測試。如果我發現問題,我會用更多信息更新我的帖子。 –

+0

嗨Kismert,我檢查了你的回答作爲答案。儘管它不直接導致答案,但它是非常有用和有用的信息。對此,我真的非常感激。 –