读书人

随机生成记录有关问题

发布时间: 2012-03-29 12:53:13 作者: rapoo

随机生成记录问题
求实现以下功能的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()

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

读书人网 >SQL Server

热点推荐