数据库SQL2005。表为ZHzjdfx。我想在一个连接里,做如下几件事情
1:将表里列名为edit_num的一行的最大值取出来(比如说是20)赋给变量a;
2:将表里列名为zb1里的每一行数据取出来,加起来求平均值后赋给变量b;
请问这两个过程是需要进行两次数据库连接么。还是一次就能完成。具体代码怎么写呢?ADO.NET的代码还不是太熟悉。麻烦热心人帮助写一下具体的代码

解决方案 »

  1.   

    取出Datatable 然后用DataTable.Select("条件")这个方法就行..
      

  2.   

    Select Max(edit_num) from tb然后在程序里直接用this.TextBox.Text = DataTable.Rows[0]["edit_num"].toString();//绑定最大值
    --------------int sum = 0;
    For(int i = 0;i< dt.Rows.count -1 ;i++)
    {
        sum = sum + int.Parse(dt.Rows[i]["zb1"].toString());
    }
      

  3.   

    直接用SQL语句就行了啊,max(edit_num)   avg(zbl)SqlDateReader 读起后在付值给a,b就可以了
      

  4.   


    恩 用SQL 处理后绑定 也行- - 我竟然忘记了AVG 
    呵呵
      

  5.   


    给你个SQL。
    select (select max(edit_num) from ZHzjdfx) as a,(select sum(zb1)/count(*) from ZHzjdfx) as b
      

  6.   

            public OleDbConnection GetSqlConnection()
            {
                string Connect = "Provider=Microsoft.Jet.OleDb.4.0;Data Source=" + System.Path.GetFullPath("ACCESS数据库相对路径");
                OleDbConnection conn = new OleDbConnection(Connect);
                return conn;
            }
            
            public DataTable fillDT()
            {
                conn = GetSqlConnection();
                sqlword = " SELECT MAX(edit_num) AS MAX_edit_num,AVG(zbl) AS AVG_zbl FROM USC_TABLE
    "
                coda = new OleDbDataAdapter(sqlword, conn);
                try
                {
                    DataSet fillds = new DataSet();
                    coda.Fill(fillds, "list");
                    c = fillds.Tables["list"].Rows.Count;
                    GC.Collect();
                    return fillds.Tables["list"];
                }
                catch (Exception e)
                {
                    DataTable dt = new DataTable();
                    GC.Collect();
                    return dt;
                }
            }
    private void button3_Click(object sender, System.EventArgs e)
    { System.Data.DataTable dt = new System.Data.DataTable();
    dt = fillDT();
    this.lable1.text = dt.Rows[0]["MAX_edit_num"].ToString();
    this.lable2.text = int.Parse(dt.Rows[0]["AVG_zbl"].ToString());
    }
            
            
      

  7.   

    select max(edit_num),avg(zbl) from table
      

  8.   


    SELECT MAX(edit_num) AS MAX_edit_num,AVG(zbl) AS AVG_zbl FROM ZHzjdfx这样不就好了 - - 
      

  9.   

    谢谢您。想问一下,两段代码在一个数据库连接里就可以做到么?另外您能不能写一下具体的代码呢。是C#的。包括数据库里连接,cmd那些等等
      

  10.   

    请问AVG是什么东西啊,它有什么用处呢
      

  11.   

    您这个看着很棒~不过我在求平均值的时候,后边的数加起来之后要除以一个总数,这个总数就是前边我查询的那一列的最大值,而不是那个count from 表格。请问怎么实现啊
      

  12.   


    C#        
           谢谢您给我写了这么多。我想说的是,我用的是C#。另外您这个是不是有点复杂啊,我看其他人的好像简单一些。能不能您再给写一下呢,呵呵。谢谢啦
    [/Quote]C#.. 这段些代码通用的啊 除非数据库连接要改动下。。 其他应该没什么        public OleDbConnection GetSqlConnection() //Access数据库获取连接(用于ACCESS From Winform应用程序)
            {string Connect="Provider=Microsoft.Jet.OleDb.4.0;Data Source="+ System.Path.GetFullPath("ACCESS数据库相对路径"); //获取连接字符串
                OleDbConnection conn=new OleDbConnection(Connect);
                return conn;//返回连接字符串
            }public DataTable fillDT()//查询数据库结果 返回DataTable
            {
                conn= GetSqlConnection();
                sqlword=" SELECT MAX(edit_num) AS MAX_edit_num,AVG(zbl) AS AVG_zbl FROM USC_TABLE
    "            coda=new OleDbDataAdapter(sqlword, conn);try
                {
                    DataSet fillds=new DataSet();
                    coda.Fill(fillds,"list");
                    c= fillds.Tables["list"].Rows.Count;
                    GC.Collect();return fillds.Tables["list"];
                }catch (Exception e)
                {
                    DataTable dt=new DataTable();
                    GC.Collect();return dt;
                }
            }privatevoid button3_Click(object sender, System.EventArgs e)
            {            System.Data.DataTable dt=new System.Data.DataTable();
                dt= fillDT();
    this.lable1.text= dt.Rows[0]["MAX_edit_num"].ToString();//将查询出的Max_edit_num这一列的值绑定 lable1.text
     this.lable2.text=int.Parse(dt.Rows[0]["AVG_zbl"].ToString());();//将查询出的AVG_zbl这一列的值绑定 lable1.text        } SELECT MAX(edit_num) AS MAX_edit_num,AVG(zbl) AS AVG_zbl FROM ZHzjdfx
    MAX(edit_num) AS MAX_edit_num //获取edit_num的最大值 重命名为MAX_edit_num
    AVG(zbl) AS AVG_zbl //获取zbl的平均值 重命名为AVG_zbl
      

  13.   


    avg   SQL自带求平均的函数
      

  14.   


    avg( )函数返回的平均价值,数值栏。 
    数据库的AVG ( )语法
    SELECT AVG(列名) FROM table_name不用那么麻烦。。
      

  15.   

    直接用SQL语句就行了啊,max(edit_num)  avg(zbl)SqlDateReader 读起后在付值给a,b就可以了[/Quote]
    请问SQL语句写完之后,怎么讲数据读取出来呢?sqldateReader怎么用啊?
      

  16.   

    public DataTable fillDT() 
            { 
                conn= GetSqlConnection(); 
                sqlword=" SELECT MAX(edit_num) AS MAX_edit_num,AVG(zbl) AS AVG_zbl FROM USC_TABLE 
    "            coda=new OleDbDataAdapter(sqlword, conn);try 
                { 
                    DataSet fillds=new DataSet(); 
                    coda.Fill(fillds,"list"); 
                    c= fillds.Tables["list"].Rows.Count; 
                    GC.Collect();return fillds.Tables["list"]; 
                }catch (Exception e) 
                { 
                    DataTable dt=new DataTable(); 
                    GC.Collect();return dt; 
                } 
            }这个方法不是已经返回了一个 DataTable 了么?
      

  17.   

    System.Data.DataTable dt=new System.Data.DataTable();
                dt= fillDT();
    string a = dt.Rows[0]["MAX_edit_num"].ToString();//将查询出的Max_edit_num这一列的值绑定 lable1.text
     string b =int.Parse(dt.Rows[0]["AVG_zbl"].ToString());();//将查询出的AVG_zbl这一列的值绑定 lable1.text-.-给a,b赋值
      

  18.   

            public OleDbConnection GetSqlConnection()
            {
                string Connect = "Provider=Microsoft.Jet.OleDb.4.0;Data Source=" + System.Path.GetFullPath("ACCESS数据库相对路径"); //获取数据库连接字符串
                OleDbConnection conn = new OleDbConnection(Connect); 
                return conn; //返回数据库连接
            }
            
            public DataTable fillDT()
            {
                conn = GetSqlConnection(); 
                sqlword = " SELECT MAX(edit_num) AS MAX_edit_num,AVG(zbl) AS AVG_zbl FROM ZHzjdfx" //数据库查询语句
                coda = new OleDbDataAdapter(sqlword, conn);
                try
                {
                    DataSet fillds = new DataSet();
                    coda.Fill(fillds, "list");
                    c = fillds.Tables["list"].Rows.Count;
                    GC.Collect();
                    return fillds.Tables["list"];
                }
                catch (Exception e)
                {
                    DataTable dt = new DataTable();
                    GC.Collect();
                    return dt;
                }
            }
            private void button3_Click(object sender, System.EventArgs e)
            {            System.Data.DataTable dt = new System.Data.DataTable();
                dt = fillDT();
                string a = dt.Rows[0]["MAX_edit_num"].ToString();//给a赋值
                string b = int.Parse(dt.Rows[0]["AVG_zbl"].ToString());//给b赋值
            }
      

  19.   

    还要麻烦您一下。我想把ZHzjdfx里edit_num的最大值传给ZH_total里的zj_num,把ZHzjdfx里zb1的平均值传给zb2。SQL语句这么写说我不对:INSERT INTO ZH_total
                          (zj_num, zb2)
    VALUES     (max(edit_num), avg(zb1))
    FROM         ZHzjdfx
    WHERE     year = 2009
    说不允许使用列名。请问该怎么写呢?
      

  20.   

    哈。。那还不简单呀
    你直接这样子做就可以了呀
    select (select max(edit_num) from ZHzjdfx) as a,(select sum(zb1)/max(edit_num) from ZHzjdfx) as b
      

  21.   

    INSERT INTO ZH_total  (zj_num, zb2) 
    VALUES (SELECT max(edit_num) FROM ZH_total , SELECT avg(zb1) FROM ZH_total)