字典翻译 问答 其它 【SQL计算列的问题我要在数据库中加入计算列,比如有a,b,c三列,计算列D=(a+b+c)/3,然后想用E列来存储a,b,c的方差,公式为e=(a-d)*(a-d)+(b-d)*(b-d)+(c-d)*(c-d);第一个问题:SQLServer2008提示“验证列e的公】
问题标题:
【SQL计算列的问题我要在数据库中加入计算列,比如有a,b,c三列,计算列D=(a+b+c)/3,然后想用E列来存储a,b,c的方差,公式为e=(a-d)*(a-d)+(b-d)*(b-d)+(c-d)*(c-d);第一个问题:SQLServer2008提示“验证列e的公】
问题描述:

SQL计算列的问题

我要在数据库中加入计算列,比如有a,b,c三列,计算列D=(a+b+c)/3,然后想用E列来存储a,b,c的方差,公式为e=(a-d)*(a-d)+(b-d)*(b-d)+(c-d)*(c-d);第一个问题:SQLServer2008提示“验证列e的公式出错”.这是怎么回事.第二个问题,我应该这样设置计算列来存储方差和标准差?.第三个问题,这是一个掷骰子的问题,我要循环的插入三次掷骰子的组合结果,怎么写SQL代码?

李广宇回答:
  1.一个计算列中不能引用另一个计算列   2.像这样   create table tt7   (a int   ,b int   ,c int   ,d as (a+b+c)/3.0   ,e as (a-(a+b+c)/3.0)*(a-(a+b+c)/3.0)+(b-(a+b+c)/3.0)*(b-(a+b+c)/3.0)+(c-(a+b+c)/3.0)*(c-(a+b+c)/3.0)   )   3.直接插入1到6之间的随机数就行了   insert into tt7 (a,b,c)   values (   ceiling(rand(checksum(newid()))*6),   ceiling(rand(checksum(newid()))*6),   ceiling(rand(checksum(newid()))*6))   需要多行数据的时候,循环执行就好了
任爱爱回答:
  如果我要插入的数据为任意两次不重复的呢,比如只插入类似1.2.3,3.5.6的结果,而不差插入类似1.2.2或5.5.6的结果。相当于一个不放回抽样,怎么写代码呢?
李广宇回答:
  这个事情比较复杂。为实现从1到6中随机抽取3个数,需要写个存储过程。   --用Knuth洗牌算法在1到M范围内随机抽取n个不重复的整数(n<M)   create procedure usp_KnuthShuffle1(@n int,@M int)   as   begin   --Knuth洗牌算法可以这样描述:   --首先生成一个M维的数组,其中顺序存放着1到M,   --令i从1到M-1循环,   --每次循环中生成从i到M之间的一个随机整数j,   --交换i和j两个位置上的整数   --最后将得到一个随机顺序的新数组   --取出此新数组的前n个,就得到了1到M范围内n个不重复的随机整数   declare @t table(seq int, v int); --seq是序号,v是值   insert into @t   select number,number from master.dbo.spt_values   where number>=1 and number<=@M and type='p'   declare @i int,@j int,@vi int,@vj int;   set @i=0;   while (@i<@M-1)   begin   select @i=@i+1;   set @j=ceiling(rand()*(@M-@i+1))+@i-1;   if (@i!=@j)   begin   select @vi=v from @t where seq=@i;   select @vj=v from @t where seq=@j;   update @t set v=@vi where seq=@j;   update @t set v=@vj where seq=@i;   end   end   declare @sql varchar(8000);   select @sql='select ';   select @sql=@sql+','+convert(varchar,v)   from @t where seq <= @n   order by seq asc;   select @sql=stuff(@sql,8,1,'');   --select @sql   exec(@sql)   end   --存储过程像这样用   insert into tt7 (a,b,c)   exec usp_KnuthShuffle1 3,6
点击显示
其它推荐
热门其它推荐
  • 其它