2017-01-04 4 views
1

日対数量チャートへ:VB.NETデータベースクエリは、私は、次のような情報をAccessデータベースのテーブルを持っている

DATE SERIAL結果を
2016年1月5日5299 PASS
1月5日/ 2016年、私はSERIALのものの数を表示するためのクエリを実行しようとしている5371 PASS
2016年1月6日5280 PASS
2016年1月6日3962 FAIL
2016年1月7日1325 PASS

「合格」の結果を得て、毎日それらをプロットします。私は、次のされ得るために管理している最も近い:私は私のフォーム(dtpFromとdtpTo)にDateTimePickersを使用して、両方の開始日と終了日のために2016年1月5日を選択した場合

Dim ds As New DataSet 
Dim da As OleDb.OleDbDataAdapter 
Dim query As String 
Dim FullDatabasePath As String = "C:\db.accdb" 
Dim dbProvider As String = "PROVIDER=Microsoft.ACE.OLEDB.12.0;" 
Dim dbSource As String = " Data Source = " & FullDatabasePath 
Dim table As String = "tblQA" 

query = "SELECT [DATE], (SELECT COUNT([SERIAL]) FROM " & table & " WHERE [DATE] BETWEEN #" & dtpFrom.Value.ToString("MM/dd/yyyy") & "# And #" & dtpTo.Value.ToString("MM/dd/yyyy") & "# AND RESULT = 'PASS') as RowCount FROM [" & table & "] WHERE DATE BETWEEN #" & dtpFrom.Value.ToString("MM/dd/yyyy") & "# And #" & dtpTo.Value.ToString("MM/dd/yyyy") & "# AND RESULT = 'PASS'" 

Dim con As OleDb.OleDbConnection = New OleDb.OleDbConnection 
con.ConnectionString = dbProvider & dbSource 

da = New OleDb.OleDbDataAdapter(query, con) 
ds.Clear() 

con.Open() 
da.Fill(ds, table) 
con.Close() 

Chart1.Series.Add("PASS") 

Chart1.DataSource = ds.Tables(table) 
Chart1.Series("PASS").XValueMember = "DATE" 
Chart1.Series("PASS").YValueMembers = "RowCount" 
  • 、私のチャートが私を示してい2016年1月5日の2つのシリアル同様に、2015年1月6日の開始日と終了日を選択すると1つのシリアルが表示されます。 012平成20年1月5日の開始日と2011年1月7日の終了日を選択すると、3日ごとに4つの連番が表示されます。 (ブー)

私はそれを蓄積させないで、代わりに毎日の通し番号の数を表示できますか?

答えて

0

私はこのSQLは、あなたがやりたいと考えている。

SELECT [DATE], COUNT(RESULT) 
FROM Table_1 
where result = 'PASS' AND [Date] BETWEEN '20160501' AND '20160701' 
group by [date] 

はEDIT:日付がMS T-SQLに合うようにフォーマットされている - あなたは、アクセス(およびあなたのDTPのを)合わせてこれらを微調整する必要がありますのコース。

+0

ご意見ありがとうございます。今は完璧に動作しています。後の見解では、パスの結果を数え、日付でグループ化することは理にかなっています。私はシリアルナンバーが何であるか心配する必要はありません。 'query =" SELECT [DATE]、COUNT(RESULT)から "RESULTCOUNT FRUE&RESULT = 'PASS'と[DATE]からRESULTCOUNT ASを返します。このコードを次のコードに翻訳しました。 # "GROUP BY [DATE]" " – fiveighteen

+0

"&dtpFrom.Value.ToString( "MM/dd/yyyy")& "#And#"&dtpTo.Value.ToString( "MM/dd/yyyy")ありがとう。完全性のために、私は答えに日付の書式についての注釈を追加しました。 – peterG

関連する問題