【问题标题】:Filter Data from Database从数据库中过滤数据
【发布时间】:2017-08-20 18:19:04
【问题描述】:

我想从 access 数据库中过滤数据并将其显示给 datagridview。以下是数据库中的数据。

ADMISSIONNO  STUDENTNAME  STUDENTCLASS  STUDENTSECTION    DUE    CLASSID
   111         nitish           6               a         1477     33
   112         ravi             6               a         1400     33
   113         raj              7               b         5000     35
   111         nitish           6               a         1200     33
   112         ravi             6               a         900      33
   113         raj              7               b         1000     35
   111         nitish           6               a         500      33
   112         ravi             6               a         300      33
   113         raj              7               b         600      35

当用户选择 CLASSID(33) 时,我想要一个查询来过滤上述数据, 输出应该与相同的 ADMISSIONNO 中的最低应得的相同,显示该行。输出应该是

ADMISSIONNO   STUDENTNAME  STUDENTCLASS  STUDENTSECTION   DUE
   111         nitish           6               a         500
   112         ravi             6               a         300

我正在使用的查询是:

 OleDbCommand command1 = new OleDbCommand();
            command1.Connection = connection;
            string clas = "SELECT FeeData.ADMISSIONNO, FeeData.STUDENTNAME, FeeData.DUE, FeeData.STUDENTCLASS, FeeData.STUDENTSECTION, FeeData.CLASSID FROM FeeData WHERE(((FeeData.DUE) > '0') AND((FeeData.CLASSID) = "+ClassID+")) ";
            command1.CommandText = clas;
            OleDbDataReader reader = command1.ExecuteReader();
            while (reader.Read())
            {
              //read the data
            }

运行此查询后,我得到的数据是:

ADMISSIONNO  STUDENTNAME  STUDENTCLASS  STUDENTSECTION    DUE    CLASSID
   111         nitish           6               a         1477     33
   112         ravi             6               a         1400     33
   111         nitish           6               a         1200     33
   112         ravi             6               a         900      33
   111         nitish           6               a         500      33
   112         ravi             6               a         300      33

我猜查询不正确。请帮帮我!!

【问题讨论】:

  • 你需要 GROUP BY 和 MIN 标量函数

标签: c# ms-access datagridview


【解决方案1】:

您需要在字段上使用 GROUP BY 和 MIN 以根据您的所有条件对记录进行分组,然后选择具有最小值的记录。

string clas = @"SELECT f.ADMISSIONNO, f.STUDENTNAME, f.STUDENTCLASS,
                       f.STUDENTSECTION, f.CLASSID, MIN(f.DUE)
               FROM FeeData AS f 
               WHERE f.DUE > 0 AND f.CLASSID = @id
               GROUP BY f.ADMISSIONNO, f.STUDENTNAME, f.STUDENTCLASS,
                        f.STUDENTSECTION, f.CLASSID";

还请注意,您从不连接字符串来创建 sql 命令,而是始终使用参数化查询

command1.CommandText = clas;
command1.Parameters.Add("@id", OleDbType.Integer).Value = ClassID;
OleDbDataReader reader = command1.ExecuteReader();

【讨论】:

    【解决方案2】:

    试试这个查询。 您需要在查询中写入GROUP BY。 就写这个吧。


    SELECT *
    FROM FeeData
    WHERE(((FeeData.DUE) > '0') AND((FeeData.CLASSID) = "+ClassID+"))
    GROUP BY ADMISSIONNO'
    

    【讨论】:

      猜你喜欢
      • 2010-12-06
      • 2019-03-18
      • 1970-01-01
      • 1970-01-01
      • 2018-10-03
      • 2014-10-25
      • 1970-01-01
      • 2014-04-06
      相关资源
      最近更新 更多