我想从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
我猜查询不正确。请帮帮我!!
答案 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'