2013-01-04 74 views
1

我正在創建一個Access 2010數據庫來替換舊的悖論。剛剛開始查詢,並且沒有隱瞞我是SQL新手。日期加入包含計算域的查詢

我想要做的是設置一個查詢,供圖使用。圖形的Y軸是一個簡單的百分比,X軸是某一天。圖表將在表單加載和後續新記錄中創建,日期範圍爲「日期()和日期() - 30」(30天,滾動)。

我正在使用的數據庫可以每天多次檢查多遍,並多次失敗。每次檢查都是一個單獨的記錄。

例如,在2012年11月26日完成了7次檢查; 5人通過,2人失敗,71%((5/7)* 100%)接受。 「11/26/2012」和「71%」代表圖表上的一個數據點。 2012年11月27日完成了8次檢查; 4人通過,4人失敗,50%接受。等

這裏是一個域「日期」和日期範圍的「處置」查詢的一個例子「2012年11月26日 - 2012年11月27日:」

SELECT Inspection.Date, Inspection.Disposition 
FROM Inspection 
WHERE (((Inspection.Date) Between #11/26/2012# And #11/27/2012#) AND ((Inspection.Disposition)="PASS" Or (Inspection.Disposition)="FAIL")); 

Date  | Disposition 
11/26/2012 | PASS 
11/26/2012 | FAIL 
11/26/2012 | FAIL 
11/26/2012 | PASS 
11/26/2012 | PASS 
11/26/2012 | PASS 
11/26/2012 | PASS 
11/27/2012 | PASS 
11/27/2012 | PASS 
11/27/2012 | FAIL 
11/27/2012 | PASS 
11/27/2012 | FAIL 
11/27/2012 | PASS 
11/27/2012 | FAIL 
11/27/2012 | FAIL 

*注 - 日期字段的類型爲「日期」,而處置字段的類型爲「文本」。有幾天沒有檢查完成,這些日子不會顯示在圖表上。檢查處理也可以列爲「不適用」,即不適用於其他類型的檢查。

這裏是我想在另一個查詢創建佈局(再次,爲了簡潔,只有2範圍內的天):

Date  | # Insp | # Passed | # Failed | % Acceptance 
11/26/2012 | 7  | 5  | 2  | 71 
11/27/2012 | 8  | 4  | 4  | 50 

我認爲需要做的是一些類型的聯接上的記錄在查詢結果的其餘部分中記錄自己和「計算字段」。問題是 ,我還沒有找到如何按日期「平坦化」記錄,並保持一個查詢中檢查次數和通過/失敗的次數。我需要多個分層查詢嗎?我不希望將任何查詢存儲爲表格,因爲這些數字的唯一用法是以圖形形式。

我正在考慮在數據庫中創建新的列,以便通過分配合格「1」和失敗「0」來解決「處置」字段爲文本性,但這看起來像是一個cop-out。必須有一種方法可以在SQL中完成這項工作,但我沒有找到適用的例子。

感謝您的幫助!任何意見或建議表示讚賞!包含表單,查詢和圖表的示例數據庫也很有幫助!

回答

0

您可以通過Date組,然後用骨料像sumcount來計算該組統計數據:

select Date 
,  count(*) as [# Insp] 
,  sum(iif(Disposition = 'PASS',1,0)) as [# Passed] 
,  sum(iif(Disposition = 'FAIL',1,0)) as [# Failed] 
,  100.0 * sum(iif(Disposition = 'PASS',1,0))/count(*) as [% Acceptance] 
from YourTable 
where Disposition in ('PASS', 'FAIL') 
group by 
     Date 
+0

這似乎這樣的伎倆!我只需要處理舊的導入數據庫中的嘮叨問題,以確保它是傻瓜證明。有了新的入口驗證數據,它非常棒!謝謝! – Phizon

+0

計數(*)是一個全面的因素,它計數所有記錄?是否可以傳遞參數以將計數限制爲僅帶有「PASS」或「FAIL?」的記錄? – Phizon

+0

你可以添加一個'where'子句來做到這一點,並在答案中更新。或者'sum(iif(或者(Disposition ='PASS',Disposition ='FAIL'),1,0))'只會通過計數而失敗。 – Andomar