【问题标题】:How to create an IF-ELSE statement if there are two similar MAX value, hence find the MIN value from the database如果有两个相似的 MAX 值,如何创建 IF-ELSE 语句,从而从数据库中找到 MIN 值
【发布时间】:2013-12-19 01:42:50
【问题描述】:

我的数据库中有四列,“UniqueID”、“Exam”、“Percent1”和“Time1”。我能够轻松地显示数据库中的 MAX 值,因此能够获得最佳的“考试”结果。

但现在我遇到一个问题,如果有相似的 MAX 值,选择哪个“考试”。因此,如果出现此问题,我会从“Time1”列中选择 MIN,该列与 MAX 值在同一行。但我不知道该怎么做。

我尝试了类似的方法,但不幸的是出现了错误。非常感谢任何建议或提示。谢谢

var userID = "hello";
    string maxnum, name;

    string SqlString = "SELECT max(Test3)from Table2 WHERE Test1 = @ID AND min(Test4)";

    using (objCon = new OleDbConnection(ConnectString))
    {
        using (objCmd = new OleDbCommand(SqlString, objCon))
        {
            objCmd.Parameters.AddWithValue("@ID", userID);
            objCon.Open();

            maxnum = objCmd.ExecuteScalar().ToString();
            Label1.Text = maxnum;
        }
    }

【问题讨论】:

  • 在所有情况下您从查询中获得的值只是max,如果您有许多相同的最大值,没关系,它只是为您选择正确的最大值,所以你怎么能选择正确的行?至少您必须选择更多列才能看到差异

标签: c# sql max min


【解决方案1】:

假设 Test4 是您的 Time1 列;

string SqlString = "SELECT Top 1 max(Test3), Test4 
                    from Table2 WHERE Test1 = @ID  
                    Group By Test4 
                    Order by Test4"

【讨论】:

  • 如果我想显示 Test 4 的值,也就是 Time1,我应该如何添加参数?我是否使用 ExecuteScalar 就像如何使用变量 maxnum 显示 MAX 一样?我不确定我应该输入什么?
  • 试试这个; string[] result=maxnum.ToString().Split(new char[] { ',' }); Label1.Text =result[0]; string Test4 =result[1];
  • 很抱歉,这部分到底是做什么的string[] result = maxnum.ToString().Split(new char[] { ',' });,这是获取 max test3 及其 Test4 数据的正确方法吗? objCmd.Parameters.AddWithValue("@ID", userID); objCon.Open(); maxnum = objCmd.ExecuteScalar().ToString(); string[] result = maxnum.ToString().Split(new char[] { ',' }); Label1.Text = result[0]; string Test4 = result[1]; Label2.Text = Test4; }
  • 是的,因为ExecuteScalar 返回第一行,您只需要拆分结果以逐列检索它们。而result[0] 将包含第一个值,即max(Test3) 的值,同样,result[1] 将包含第二列,taht 是 Test4
  • 我收到一个错误,提示它超出范围索引超出了数组的范围。 我不应该使用 executereader 而不是 executescalar 吗?作为执行阅读器将获取整行数据?
【解决方案2】:

你可以像这样使用子请求

SELECT max(Test3)from Table2 WHERE Test1 = @ID AND 
Test4 = select(min(Test4) from Table2 where Test1 = @ID)

【讨论】:

    【解决方案3】:

    也许你可以试试这个:

    string SqlString = "SELECT top 1 * from Table2 WHERE Test1 = @ID order by Exam desc, Time1";
    

    【讨论】:

      【解决方案4】:

      我终于可以用这段代码来回答了:

      string SqlString = "SELECT Top 1 Test3, Test4 from Table2 WHERE Test1 = @ID Order by Test4 ASC, Test3 ASC";
      
      using (objCon = new OleDbConnection(ConnectString))
      {
          using (objCmd = new OleDbCommand(SqlString, objCon))
          {
              objCmd.Parameters.AddWithValue("@ID", userID);
              objCon.Open();
      
              OleDbDataReader reader = objCmd.ExecuteReader();
      
              if (reader.Read())
              {
                  Label1.Text = reader["Test3"].ToString();
                  Label2.Text = reader["Test4"].ToString(); 
              }
              reader.Close();
          }
          objCon.Close();
      }
      

      感谢大家花时间帮助我

      【讨论】:

        猜你喜欢
        • 2021-05-28
        • 1970-01-01
        • 2017-06-10
        • 1970-01-01
        • 2021-05-07
        • 1970-01-01
        • 2014-12-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多