首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

随机生成记录有关问题

2012-03-29 
随机生成记录问题求实现以下功能的sql代码。有一组数字“0,0,0,0,1,2,3,4,5,6,7,8,9,0,0,0,0,1,2,3,4,5,6,7,

随机生成记录问题
求实现以下功能的sql代码。
有一组数字“0,0,0,0,1,2,3,4,5,6,7,8,9,0,0,0,0,1,2,3,4,5,6,7,8,9,0,0,0,0,1,2,3,4,5,6,7,8,9,0,0,0,0,1,2,3,4,5,6,7,8,9,0,0,0,0,1,2,3,4,5,6,7,8,9,0,0,0,0,1,2,3,4,5,6,7,8,9,0,0,0,0,1,2,3,4,5,6,7,8,9,0,0,0,0,1,2,3,4,5,6,7,8,9,0,0,0,0,1,2,3,4,5,6,7,8,9,0,0,0,0,1,2,3,4,5,6,7,8,9,0,0,0,0,1,2,3,4,5,6,7,8,9,0,0,0,0,1,2,3,4,5,6,7,8,9,0,0,0,0,1,2,3,4,5,6,7,8,9,0,0,0,0,1,2,3,4,5,6,7,8,9,0,0,0,0,1,2,3,4,5,6,7,8,9,0,0,0,0,1,2,3,4,5,6,7,8,9,0,0,0,0,1,2,3,4,5,6,7,8,9,0,0,0,0,1,2,3,4,5,6,7,8,9,0,0,0,0,1,2,3,4,5,6,7,8,9,0,0,0,0,1,2,3,4,5,6,7,8,9,0,0,0,0,1,2,3,4,5,6,7,8,9,0,0,0,0,1,2,3,4,5,6,7,8,9,0,0,0,0,1,2,3,4,5,6,7,8,9,0,0,0,0,1,2,3,4,5,6,7,8,9,0,0,0,0,1,2,3,4,5,6,7,8,9,0,0,0,0,1,2,3,4,5,6,7,8,9,0,0,0,0,1,2,3,4,5,6,7,8,9,0,0,0,0,1,2,3,4,5,6,7,8,9,0,0,0,0,1,2,3,4,5,6,7,8,9,0,0,0,0,1,2,3,4,5,6,7,8,9,0,0,0,0,1,2,3,4,5,6,7,8,9,0,0,0,0,1,2,3,4,5,6,7,8,9”
第一步:
随机去掉上面数组中的20个数
第二步:
取数,判断,写入数据库。
有两个对象:前者,后者。
前者、后者在上面数组中各取得最少2个数字,最多3个数字,比较前者和后者各自取得的‘数字的和’的‘个位上的数值’的大小。
=======1.字符判断规则=============
如果前者‘个位上的数值’大于后者‘个位上的数值’的话,就计为字符“A”写进表中;
如果前者‘个位上的数值’小于后者‘个位上的数值’的话,就计为字符“B”写进表中;
如果前者‘个位上的数值’等于后者‘个位上的数值’的话,就计为字符“C”写进表中。
取数规则如下:
=======2.取数规则(数字取后都不再放回去)==========
前者,后者按照下列顺序先各自取得2个数字。
取数顺序:
1.前者随机从数组中取一个数字,
2.后者随机从数组的剩余数字中取一个数字,
3.前者随机从数组的剩余数字中取一个数字,
4.后者随机从数组的剩余数字中取一个数字,

计算前者取得的两个数的和,求得这个“和”的个位数上的值
计算后者取得的两个数的和,求得这个“和”的个位数上的值

按照如下规则(前者后者各自和的个位上的值)决定前者或者后者是否需要取第三个数。

当下列条件满足时停止取值(停止取值定义:前者后者一个数都不取,包括第三个数也不取),做为一轮循环结束标志。(停止取值条件:当第三个数该取的取,做完最后一次比较,得出A、B、C值,这时数组剩余数字为“刚刚”在8个数-14个数之间)
=======3.取第三个数规则======
前者、后者任何一方取得两个数的和的个位数上的值为8或者9的话,两者都不用取第三个数。

前者两个数的和的个位上的数值                
0   必须取                                                    
1   必须取                                                    
2   必须取                                                    
3   必须取                                                  
4   必须取                                                  
5   必须取                                                        
6   不得取                                                        
7   不得取                                                          
8   前者后者都不得取                                    
9   前者后者都不得取                                
-----
后者两个数的和的个位上的数值
0   必须取  


1   必须取
2   必须取  
3   取.但是如下情况毋须取(若前者取了第三个数并且这第三个数是8     )
4   取.但是如下情况毋须取(若前者取了第三个数,这第三个数是0,1,8,9)    
5   取.但是如下情况毋须取(若前者取了第三个数,这第三个数是0,1,2,3,8,9)  
6   不取.但是如下情况必须取(若前者取了第三个数,这第三个数是6,7   )  
7   不得取  
8   前者后者都不得取
9   前者后者都不得取  
=======4.写入数据=========
计算各自取得的数(2个或者3个)的和的个位上的数值,根据1.字符判断规则得出字符。
创建一个表sss,把下列数据写入表sss中:
1.A、B的字符值(不要C)
2.当字符值为A、B时,前者取得的2个或者3个数字(每个数值分开保存)(第三个数没有取为null)
3.当字符值为A、B时,后者取得的2个或者3个数字(每个数值分开保存)(第三个数没有取为null)

数据保存示例:
字符值   前者NO.1   前者NO.2   前者NO.3   后者NO.1   后者NO.2   后者NO.3
A             0                 9                 null           8                 0                 null

第三步:循环
1.把数组恢复初始的状态(一个数没增,一个数没减)
2.重复第一步、第二步,写入数据时为累加到以前数据的后面
3.循环100次

[解决办法]
----生成测试数据
insert into #1(value)
select 0 union all select 0 union all select 0 union all select 0
union all select 1 union all select 2 union all select 3 union all select 4
union all select 5 union all select 6 union all select 7 union all select 8
union all select 9


declare @i smallint
set @i=5

while @i> 0
begin
insert into #1
select value from #1

set @i=@i-1
end

--第一步(去掉20个数字)
select top 396 * into #2 from #1 order by newid()

[解决办法]
---第二步取数
declare @first1 int --前者的第一位
declare @first1index int --前者第一位的id值

declare @first2 int --前者的第二位
declare @first2index int --前者第二位的id值

declare @last1 int --后者的第一位
declare @last1index int --前者第一位的id值

declare @last2 int --后者的第二位
declare @last2index int --前者第二位的id值

----取数顺序:
--1.前者随机从数组中取一个数字,
--2.后者随机从数组的剩余数字中取一个数字,
--3.前者随机从数组的剩余数字中取一个数字,
--4.后者随机从数组的剩余数字中取一个数字,

select @first1=value ,@first1index=id from #2 order by newid()
select @last1=value ,@last1index=id from #2 where id <> @first1index order by newid()

select @first2=value ,@first2index=id from #2 where id <> @first1index and id <> @last1index order by newid()
select @last2=value ,@last2index=id from #2 where id <> @first1index and id <> @last1index and ... order by newid()

----其他的就自己写吧,太多啦

热点排行