新手提问解决方案

新手提问
我在sql中建了一个表testsec,字段如下
Number x1 x2 x3 x4 Xipj(x1,x2,x3,x4四个数的平均值) CL(初始值为空)n2(数据的行数),我在asp.net 中输入如下代码update testsec set CL=(sum(Xipj)/n2),可是系统提示
“聚合不应出现在 UPDATE 语句的集合列表中”所以我又改成如下代码update testsec set CL=(select sum(Xipj)/n2 from testsec),可是系统又提示“选择列表中的列 'testsec.n2' 无效,因为该列没有包含在聚合函数或 GROUP BY 子句中。 
”请问我怎样才能实现CL=(sum(Xipj)/n2)的功能啊(n2的值我是通过select count(*) from testsec 获取的)
------解决方案--------------------
楼主你根据什么去取到sum(Xipj)的值呢,应该有个Group by 之类的语句啊!
------解决方案--------------------
update testsec set CL=a.X/n2
from (select sum(Xipj) as X from testsec)a
  
*****************************************************************************
签名档: http://feiyun0112.cnblogs.com/
------解决方案--------------------
update testsec set CL=
(select sum(Xipj)/n2 from testsec group by n2)

因为你用到sum()聚合,你在结果集中就必须使用group by 对没聚合的列进行分组
------解决方案--------------------
引用:
Quote: 引用:

update testsec set CL=
(select sum(Xipj)/n2 from testsec group by n2)

因为你用到sum()聚合,你在结果集中就必须使用group by 对没聚合的列进行分组

谢谢,问题已经解决了,就是缺一个“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)