2012-06-08 53 views
0

我想從可定義的日期範圍內的5個不同字段中搜索問題代碼,然後得到每個返回的問題代碼的總和。下面的「我的查詢」對每個查詢返回的每個問題代碼進行求和,但不會將一個查詢的總計添加到另一個查詢。訪問聯盟總和查詢

SELECT CUSTRAC.PROBLEM_CO, Count(CUSTRAC.PROBLEM_CO) AS CountOfPROBLEM_CO1 
FROM CUSTRAC 
WHERE (((CUSTRAC.DATE_SHIPP) Between [Begin Date] And [End Date])) 
GROUP BY CUSTRAC.PROBLEM_CO, ([custrac].[problem_co]) 
HAVING (((CUSTRAC.PROBLEM_CO)<>"")); 

Union SELECT CUSTRAC.PROB_2, Count(CUSTRAC.PROB_2) AS CountOfPROB_2 
FROM CUSTRAC 
WHERE (((CUSTRAC.DATE_SHIPP) Between [Begin Date] And [End Date])) 
GROUP BY CUSTRAC.PROB_2, ([custrac].[prob_2]) 
HAVING (((CUSTRAC.PROB_2)<>"")); 

Union SELECT CUSTRAC.PROB_3, Count(CUSTRAC.PROB_3) AS CountofPROB_3 
FROM CUSTRAC 
WHERE (((CUSTRAC.DATE_SHIPP) Between [Begin Date] And [End Date])) 
GROUP BY CUSTRAC.PROB_3, ([custrac].[prob_3]) 
HAVING (((CUSTRAC.PROB_3)<>"")); 

Union SELECT CUSTRAC.PROB_4, Count(CUSTRAC.PROB_4) AS CountofPROB_4 
FROM CUSTRAC 
WHERE (((CUSTRAC.DATE_SHIPP) Between [Begin Date] And [End Date])) 
GROUP BY CUSTRAC.PROB_4, ([custrac].[prob_4]) 
HAVING (((CUSTRAC.PROB_4)<>"")); 

UNION SELECT CUSTRAC.PROB_5, Count(CUSTRAC.PROB_5) AS CountofPROB_5 
FROM CUSTRAC 
WHERE (((CUSTRAC.DATE_SHIPP) Between [Begin Date] And [End Date])) 
GROUP BY CUSTRAC.PROB_5, ([custrac].[prob_5]) 
HAVING (((CUSTRAC.PROB_5)<>"")); 
+3

這還沒有有效的SQL。 UNION關鍵字不能是分號後的第一個標記。無論如何,你爲什麼使用UNION?這刪除重複。你想刪除重複?我猜不是。 –

+2

我不認爲你使用'HAVING'的方式也是有效的。 「HAVING」應該與聚合函數一起使用。 –

+0

我們還要提出這樣一個事實,即group by statement在所有五個查詢中提到了兩次相同的列。 –

回答

0

如果我理解您的需求,這應該得到你在找什麼:

SELECT DISTINCT A.ProbCode, SUM(A.ProbCount) AS ProbSum FROM 
(
SELECT CUSTRAC.PROBLEM_CO AS ProbCode, Count(CUSTRAC.PROBLEM_CO) AS ProbCount 
FROM CUSTRAC 
WHERE CUSTRAC.DATE_SHIPP Between [Begin Date] AND [End Date] AND CUSTRAC.PROBLEM_CO <> '' 
GROUP BY CUSTRAC.PROBLEM_CO 

UNION ALL 

SELECT CUSTRAC.PROB_2 AS ProbCode, Count(CUSTRAC.PROB_2) AS ProbCount 
FROM CUSTRAC 
WHERE CUSTRAC.DATE_SHIPP Between [Begin Date] AND [End Date] AND CUSTRAC.PROB_2 <> '' 
GROUP BY CUSTRAC.PROB_2 

UNION ALL 

SELECT CUSTRAC.PROB_3 AS ProbCode, Count(CUSTRAC.PROB_3) AS ProbCount 
FROM CUSTRAC 
WHERE CUSTRAC.DATE_SHIPP Between [Begin Date] AND [End Date] AND CUSTRAC.PROB_3 <> '' 
GROUP BY CUSTRAC.PROB_3 

UNION ALL 

SELECT CUSTRAC.PROB_4 AS ProbCode, Count(CUSTRAC.PROB_4) AS ProbCount 
FROM CUSTRAC 
WHERE CUSTRAC.DATE_SHIPP Between [Begin Date] AND [End Date] AND CUSTRAC.PROB_4 <> '' 
GROUP BY CUSTRAC.PROB_4 

UNION ALL 

SELECT CUSTRAC.PROB_5 AS ProbCode, Count(CUSTRAC.PROB_5) AS ProbCount 
FROM CUSTRAC 
WHERE CUSTRAC.DATE_SHIPP Between [Begin Date] AND [End Date] AND CUSTRAC.PROB_5 <> '' 
GROUP BY CUSTRAC.PROB_5 

) AS A 

GROUP BY ProbCode 
+0

完美的作品。謝謝。 –

+1

@KimKalmbach如果這回答了您的問題,請點擊答案旁邊的複選標記以接受它。請參閱[如何接受答案](http://meta.stackexchange.com/q/5234/162993)? – LarsTech