2013-02-15 86 views
0

我有这样的论文项目,我应该组我的数据库,以年,月每年,每月分组的Visual Basic

这里是一个域和数据样本

表名是:tblsell

Date_Saved | Total Price 

2-5-2013  5 
2-5-2013  10 
2-5-2013  5 
2-6-2013  6 
2-7-2013  3 
2-8-2013  2 
3-1-2013  6 
3-2-2013  11 
3-3-2013  2 
3-5-2014  5 
3-6-2014  4 
现在

,我打算创建2个按钮,这样,当我在每月的点击按钮,这将显示在datagridview的

Date_saved | Total_Earnings 

2-2013 or february 2013  31 
3-2013 or march 2013   19 
3-2014 or march 2014   9 

然后,如果我按一下按钮,每年这应该datagridview的

Date_saved | Total_earnings 

2013  50 
2014  9 

表明我不知道如果我指出了正确的输出,但至少接近该输出应该这样做。

date_saved的数据类型是文本,total_earnings是访问数字。我使用datestring获取date_saved。像.add... = datestring。我不知道它是否正确,所以我可以得到日期。

我在报告查看器上尝试它们,但我不知道如何处理reportviewer,因此我放弃了,只是认为它更容易在datagridview和按钮上。

+0

等待,你在Access或VB.NET? – Brad 2013-02-15 01:00:39

+0

我使用访问作为我的VB项目的数据库。 – 2013-02-15 01:54:59

回答

2

如果你想这是一个DataGrid那么这些都是你的两个查询选项

设置好喜欢你的基地台Table1

enter image description here

您可以创建一个新的查询像这样 enter image description here

它生成此代码。

SELECT MonthName(Month([Date_Saved])) & ' ' & Year([Date_Saved]) AS [Year], Sum(Table1.[Total Price]) AS [SumOfTotal Price] 
FROM Table1 
GROUP BY MonthName(Month([Date_Saved])) & ' ' & Year([Date_Saved]); 

并产生这些结果。

enter image description here

分组是这里的关键。有几种方式来组织和他们的方式我这样做是有让您的数据网格的样子“格式化”,但比的方法,如

SELECT DATEADD('m', DATEDIFF('m',0,date_saved), 0) as [Month], sum([total price]) as [Month's Total Price] 
FROM Table1 
group by DATEADD('m', DATEDIFF('m',0,date_saved), 0) 

这是功能相当的慢,而是因为它没有做任何数据类型转换运行更快。此外,它还有一个额外的好处,即现在您可以在报告的文本框中格式化日期,但是您感觉并且不决定查询时间。缺点是与使用monthmonthname,year函数相比,dateadd/datediff方法有一点钝。

+0

谢谢你回答,甚至与图像,所以我可以很容易地理解它:D现在工作正常。 – 2013-02-15 01:53:22

+0

优秀,你非常欢迎:) – Brad 2013-02-15 02:47:55