每年,每月分组Visual Basic

时间:2013-02-15 00:22:49

标签: vb.net vba grouping

我有这个论文项目,我应该将我的数据库分组为年度和月度

这是字段和数据样本

表名是: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的数据类型为text,total_earnings为访问时的数字。我使用datestring获取date_saved。比如.add... = datestring。我不知道它是否正确所以我可以得到日期。

我正在使用reportviewer尝试它们,但我不知道如何在reportviewer上做什么,所以我放弃了,只是想在datagridview和按钮上更容易。

1 个答案:

答案 0 :(得分:2)

如果您希望将其作为数据网格,那么这些是您的两个查询选项

将您的基本表格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)

这在功能上是等效的,但由于它不进行任何数据类型转换,因此运行速度更快。此外,它还有一个额外的好处,您现在可以在报表的文本框中设置日期格式,但您感觉并且不会决定查询时间。缺点是dateadd / datediff方法与使用monthmonthnameyear函数相比有点迟钝。