这与Winforms/C#/MYSQL有关。 我有下表:
Netty /日期
50条/2013-3-15
40/2013-11-10
30/2013-3-25
该程序允许用户选择他想要查看数据的月份,理想情况下输出应该是一个图表(我知道如何做)来展示总 Netty 与月份的关系。输出应类似于以下内容:
Netty /月
80/三月
40/11 月
有人建议我尝试一下:
var selectdataforGraph = "SELECT SUM(AMOUNT_NET) AS Amount_Net, MONTH(date_Check) as Month FROM testingproject.incomeinformation WHERE";
var monthList = string.Join(",", selectedMonth);
selectdataforGraph += " YEAR(date_check) = " + selected_year;
selectdataforGraph += " AND MONTH(date_check) in (" + monthList + ")";
但是当我在数据库中运行查询时
SELECT SUM(Amount_Net) AS Amount_Net, Month(date_check) AS Selected_Month FROM testingproject.incomeinformation WHERE YEAR(date_check) AND MONTH(date_check) in (1,11);
结果是两个月的总 Amount_Net Sum,如下所示:
Amount_Net/Selected_Month
120/11
我确实尝试制作另一个表,其中已计算出每月的净金额,但由于在某些情况下我需要选择多个月份,因此包含月份的列是 varchar,该月份的一部分上面的查询不起作用。我也可以重新设计带有日期列的新表,但我觉得我已经非常接近第一个响应了。我也知道我应该使用参数来避免 sql 注入(inject),但这更多的是为了快速演示问题。
最佳答案
您需要在 SQL 语句的 where
子句之后添加 group by
。否则,MySQL 只是将所有内容聚合到一行中,选择任意月份:
该行的语法是:
group by MONTH(date_Check), year(date_check)
我还建议您在选择
中包含年份。
您的声明将是:
var selectdataforGraph = "SELECT SUM(AMOUNT_NET) AS Amount_Net, MONTH(date_Check) as Month, year(date_check) as Year FROM testingproject.incomeinformation WHERE";
var monthList = string.Join(",", selectedMonth);
selectdataforGraph += " YEAR(date_check) = " + selected_year;
selectdataforGraph += " AND MONTH(date_check) in (" + monthList + ")";
selectdataforGraph += " group by MONTH(date_Check), year(date_check)";
关于c# - mysql从动态选择的2个单独日期中选择数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17747676/