从数据库过滤数据

时间:2017-08-19 12:22:22

标签: c# ms-access datagridview

我想从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

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

2 个答案:

答案 0 :(得分: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();

答案 1 :(得分:0)

尝试此查询。 您需要在查询中编写GROUP BY。 写下这个。

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