解决方案 »

  1.   

    楼主你根据什么去取到sum(Xipj)的值呢,应该有个Group by 之类的语句啊!
      

  2.   

    update testsec set CL=a.X/n2
    from (select sum(Xipj) as X from testsec)a
      
    *****************************************************************************
    签名档: http://feiyun0112.cnblogs.com/
      

  3.   

    update testsec set CL=
    (select sum(Xipj)/n2 from testsec group by n2)
    因为你用到sum()聚合,你在结果集中就必须使用group by 对没聚合的列进行分组
      

  4.   

    谢谢,问题已经解决了,就是缺一个“group by n2”
    但是我现在又有一个新的问题,就是我的表中有一列Xipj,我想用以下代码实现求每行的平均值
    string sqlXipj = "update testsec set Xipj=(select (x1+x2+x3+x4)/4 from testsec)";//计算每行的平均值
    int resultXipj = Convert.ToInt32(SqlHelper.ExecuteNonQuery(conn, CommandType.Text, sqlXipj, null));
    Response.Write("<script>alert('成功获取Xipj')</script>");可是系统出现如下错误提示“子查询返回的值不止一个。当子查询跟随在 =、!=、<、<=、>、>= 之后,或子查询用作表达式时,这种情况是不允许的。语句已终止。”我不知道是哪里不对,求指导啊!我是个asp.net新手
      

  5.   

    谢谢,问题已经解决了,就是缺一个“group by n2”
    但是我现在又有一个新的问题,就是我的表中有一列Xipj,我想用以下代码实现求每行的平均值
    string sqlXipj = "update testsec set Xipj=(select (x1+x2+x3+x4)/4 from testsec)";//计算每行的平均值
    int resultXipj = Convert.ToInt32(SqlHelper.ExecuteNonQuery(conn, CommandType.Text, sqlXipj, null));
    Response.Write("<script>alert('成功获取Xipj')</script>");可是系统出现如下错误提示“子查询返回的值不止一个。当子查询跟随在 =、!=、<、<=、>、>= 之后,或子查询用作表达式时,这种情况是不允许的。语句已终止。”我不知道是哪里不对,求指导啊!我是个asp.net新手
    select (x1+x2+x3+x4)/4 from testsec 这个结果集出来的是一列,赋值的时候错误了,因为不能把一列赋值给另外一列,应该改为:
    update testsec set Xipj=(select Sum((x1+x2+x3+x4)/4) from testsec)
      

  6.   

    update testsec set Xipj=(select Sum((x1+x2+x3+x4)/4) from testsec)
    而且这句也是有问题的,这样会把所有行都更新,所以应该加上where条件,变成update testsec set Xipj=(select Sum((x1+x2+x3+x4)/4) from testsec) where id(这里看你自己如何筛选)='XXX'
      

  7.   

    而且这句也是有问题的,这样会把所有行都更新,所以应该加上where条件,变成update testsec set Xipj=(select Sum((x1+x2+x3+x4)/4) from testsec) where id(这里看你自己如何筛选)='XXX'
    您好!朋友,以下是我testsec表的一部分(一共25行数据)
    Number  x1       x2     x3       x4     Xipj
    1      3.0      4.2     3.5     3.8 
    2      4.3  4.1  3.7  3.9 
    3      4.2  3.6  3.2  3.4 
    4      3.9  4.3  4.0  3.6 
    ....
    如果用您的代码“update testsec set Xipj=(select Sum((x1+x2+x3+x4)/4) from testsec) where Number=1 是可以实现的,但是只有Number=1这一行的结果,我想得到各行的结果,于是我用了for语句,代码如下
    int i;
    for(i=1;i<=25;i++)
    {
    update testsec set Xipj=(select Sum((x1+x2+x3+x4)/4) from testsec) where Number=i;
    }
    可是系统提示列名i无效,我知道是因为我的testsec表里面没有i,那我应该怎样使用循环语句实现求每行四个数的平均值啊:)求指导啊
      

  8.   

    而且这句也是有问题的,这样会把所有行都更新,所以应该加上where条件,变成update testsec set Xipj=(select Sum((x1+x2+x3+x4)/4) from testsec) where id(这里看你自己如何筛选)='XXX'
    您好!朋友,以下是我testsec表的一部分(一共25行数据)
    Number  x1       x2     x3       x4     Xipj
    1      3.0      4.2     3.5     3.8 
    2      4.3  4.1  3.7  3.9 
    3      4.2  3.6  3.2  3.4 
    4      3.9  4.3  4.0  3.6 
    ....
    如果用您的代码“update testsec set Xipj=(select Sum((x1+x2+x3+x4)/4) from testsec) where Number=1 是可以实现的,但是只有Number=1这一行的结果,我想得到各行的结果,于是我用了for语句,代码如下
    int i;
    for(i=1;i<=25;i++)
    {
    update testsec set Xipj=(select Sum((x1+x2+x3+x4)/4) from testsec) where Number=i;
    }
    可是系统提示列名i无效,我知道是因为我的testsec表里面没有i,那我应该怎样使用循环语句实现求每行四个数的平均值啊:)求指导啊
    我晕……你可以在C#中写这个循环,而不是SQL,因为你  where Number=i这句话在SQL中是不对的,在C#中,每循环一次,执行相应的SQL语句即可,只是传递进去的参数为 i
      

  9.   

    而且这句也是有问题的,这样会把所有行都更新,所以应该加上where条件,变成update testsec set Xipj=(select Sum((x1+x2+x3+x4)/4) from testsec) where id(这里看你自己如何筛选)='XXX'
    您好!朋友,以下是我testsec表的一部分(一共25行数据)
    Number  x1       x2     x3       x4     Xipj
    1      3.0      4.2     3.5     3.8 
    2      4.3  4.1  3.7  3.9 
    3      4.2  3.6  3.2  3.4 
    4      3.9  4.3  4.0  3.6 
    ....
    如果用您的代码“update testsec set Xipj=(select Sum((x1+x2+x3+x4)/4) from testsec) where Number=1 是可以实现的,但是只有Number=1这一行的结果,我想得到各行的结果,于是我用了for语句,代码如下
    int i;
    for(i=1;i<=25;i++)
    {
    update testsec set Xipj=(select Sum((x1+x2+x3+x4)/4) from testsec) where Number=i;
    }
    可是系统提示列名i无效,我知道是因为我的testsec表里面没有i,那我应该怎样使用循环语句实现求每行四个数的平均值啊:)求指导啊
    我晕……你可以在C#中写这个循环,而不是SQL,因为你  where Number=i这句话在SQL中是不对的,在C#中,每循环一次,执行相应的SQL语句即可,只是传递进去的参数为而且这句也是有问题的,这样会把所有行都更新,所以应该加上where条件,变成update testsec set Xipj=(select Sum((x1+x2+x3+x4)/4) from testsec) where id(这里看你自己如何筛选)='XXX'
    您好!朋友,以下是我testsec表的一部分(一共25行数据)
    Number  x1       x2     x3       x4     Xipj
    1      3.0      4.2     3.5     3.8 
    2      4.3  4.1  3.7  3.9 
    3      4.2  3.6  3.2  3.4 
    4      3.9  4.3  4.0  3.6 
    ....
    如果用您的代码“update testsec set Xipj=(select Sum((x1+x2+x3+x4)/4) from testsec) where Number=1 是可以实现的,但是只有Number=1这一行的结果,我想得到各行的结果,于是我用了for语句,代码如下
    int i;
    for(i=1;i<=25;i++)
    {
    update testsec set Xipj=(select Sum((x1+x2+x3+x4)/4) from testsec) where Number=i;
    }
    可是系统提示列名i无效,我知道是因为我的testsec表里面没有i,那我应该怎样使用循环语句实现求每行四个数的平均值啊:)求指导啊
    我晕……你可以在C#中写这个循环,而不是SQL,因为你  where Number=i这句话在SQL中是不对的,在C#中,每循环一次,执行相应的SQL语句即可,只是传递进去的参数为 i
    朋友,要不你帮个忙写一下这个循环呗,我实在是个外行,我写的全部代码都是参考别人再加上连蒙带猜才写成的,里面很多东西我也不是很懂,sql,asp.net我是这个寒假自学的:(
    或者您帮忙看一下下面这个代码,我就是在asp,net中写的,但还是提示列名i无效,麻烦您帮帮忙修改一下,或者帮我写一下这个代码,谢谢!
    int i;
    for (i = 1; i <= 25; i++)
    {
    string sqlXipj = "update testsec set Xipj=(select sum(x1+x2+x3+x4)/4 from testsec where Number=i) where Number=i";//获取X平均值
    int resultXipj = Convert.ToInt32(SqlHelper.ExecuteNonQuery(conn, CommandType.Text, sqlXipj, null))
    Response.Write("<script>alert('成功获取Xipj')</script>");
    }
      

  10.   


    for (int i = 0; i<25; i++)
    {
    string sqlXipj = "update testsec set Xipj=(select sum(x1+x2+x3+x4)/4 from testsec where Number="+i+")";//获取X平均值
    int resultXipj = Convert.ToInt32(SqlHelper.ExecuteNonQuery(conn, CommandType.Text, sqlXipj, null))
    Response.Write("<script>alert('成功获取Xipj')</script>");
    }这次应该是没问题了
      

  11.   

    Quote: 引用 10 楼 a01589 的回复:
    for (int i = 0; i<25; i++)
    {
    string sqlXipj = "update testsec set Xipj=(select sum(x1+x2+x3+x4)/4 from testsec where Number="+i+")";//获取X平均值
    int resultXipj = Convert.ToInt32(SqlHelper.ExecuteNonQuery(conn, CommandType.Text, sqlXipj, null))
    Response.Write("<script>alert('成功获取Xipj')</script>");
    }