按月拆分数据库结果

时间:2015-02-22 16:36:14

标签: c# database

我试图每个月从一个数据库中返回6个数字。

目前我正在使用两个相隔6个月的日期来查询数据库并返回一个总和号码,我想返回两个代表两个月之间的数字

到目前为止,我的代码是;

        OleDbCommand com = new OleDbCommand("SELECT sum([sum]) FROM Attendance WHERE ([Attendance_Date]) >= ? AND ([Attendance_Date]) <= ? AND [Person] = ?", Program.DB_CONNECTION);
        com.Parameters.Add(new OleDbParameter("", fromDate));
        com.Parameters.Add(new OleDbParameter("", toDate));
        com.Parameters.Add(new OleDbParameter("", person.ID));

        OleDbDataReader dr = com.ExecuteReader();

        if (dr.Read())
        {
            try
            {
                int attendance = Convert.ToInt32(dr.GetDouble(0));
                MessageBox.Show(attendance.ToString());
            }
            catch
            {

            }
        }
        dr.Close();

有没有人知道我如何能够重复以上6种不同日期的日期和日期?

1 个答案:

答案 0 :(得分:0)

您可以将日期分成几个部分,并专注于月份部分。

您可以使用以下SQL:

SELECT
    DATEPART(MONTH, [Attendance_Date]) AS Month,
    SUM(Value) AS Sum
FROM
    Attendance
WHERE
    [Person] = @personId
    AND [Attendance_Date] >= @fromDate
    AND [Attendance_Date] < @toDate
GROUP BY
    DATEPART(MONTH, [Attendance_Date])

请记住,此查询将返回多个包含两列的结果,因此您必须使用DataReader来读取不同的行。你的结果集将是这样的:

Month       Value
  4          250
  5          180
  7          200
  8          300
  9           25

P.S。 :此示例涵盖4月1日至10月1日之间的6个月的日期。而且6月也没有任何记录。还要记住,这段代码是用T-SQL编写的,目标是Microsoft SQL。其他变体(Oracle,mySQL查询可能因SQL差异而有所不同)