【问题标题】:VB.NET Database Query to Chart a Quantity Vs DateVB.NET 数据库查询以绘制数量与日期的图表
【发布时间】:2017-01-04 21:02:46
【问题描述】:

我在 Access 数据库中有一个表,其中包含如下信息:

日期序列结果
2016 年 1 月 5 日 5299 次通过
2016 年 1 月 5 日 5371 通行证
2016 年 1 月 6 日 5280 次通过
2016 年 1 月 6 日 3962 失败
2016 年 1 月 7 日 1325 次通过

我正在尝试运行查询以显示结果为“PASS”的 SERIAL 的计数,并为每一天绘制它们。我设法得到的最接近的是以下内容:

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"
  • 如果我使用表单上的 DateTimePickers(dtpFrom 和 dtpTo)为开始日期和结束日期选择 2016 年 1 月 5 日,我的图表会显示 2016 年 1 月 5 日的 2 个连续剧。同样,如果我选择 2015 年 1 月 6 日的开始和结束日期,它会显示 1 个序列号。 (耶)
  • 如果选择开始日期为 2016 年 1 月 5 日,结束日期为 2016 年 1 月 7 日,则这 3 天中的每一天都会显示 4 个连续剧。 (嘘)

我怎样才能让它不累积,而是显示每天通过的连续剧的数量?

【问题讨论】:

    标签: sql vb.net ms-access


    【解决方案1】:

    我相信这个 SQL 会做你想做的事:

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

    编辑:日期的格式适合 MS T-SQL - 当然,您必须调整这些以适合 Access(和您的 dtp)。

    【讨论】:

    • 感谢您的评论!它现在运行良好。事后看来,计算通过结果并按日期分组是有道理的。我什至不需要担心序列号是什么。我将您的代码翻译成以下内容,以使其与我上面的代码兼容:query = "SELECT [DATE], COUNT(RESULT) AS RESULTCOUNT FROM " & table & " WHERE RESULT = 'PASS' AND [DATE] BETWEEN #" & dtpFrom.Value.ToString("MM/dd/yyyy") & "# And #" & dtpTo.Value.ToString("MM/dd/yyyy") & "# GROUP BY [DATE]"
    • 谢谢。为了完整起见,我在答案中添加了有关日期格式的注释。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-11
    相关资源
    最近更新 更多