日期:2014-05-18 浏览次数:21006 次
--SQL2005環境:
;with NewYear
as
(select 1 as ID
union all
select ID+1 as ID from NewYear where ID<888--以888為例
),NewYear168
as
(select
*,(ID-1)/88 as ID2
from NewYear
where (ID/8)=ID*1.0/8
),NewYear2010
as
(
select
top 88 t2.ID as [Floor],
rtrim((t2.ID-1)%188+1) as Qty --188可為吉祥數字
from
(select distinct ID2 from NewYear168)t
cross apply
(select top 10 * from NewYear168 where ID2=t.ID2 order by NewID())t2
order by newID())
select
[Floor]as 樓層,
cast(stuff(replace([Qty],'4','8'),len([Qty]),1,'8') as int) as 中獎紅包
from NewYear2010
order by 1
option(MAXRECURSION 0)
--把結尾數改為8,把中間有其它數字有4的改為8。
樓層 中獎紅包 8 8 24 28 32 38 40 88 64 68 88 88 96 98 104 108 112 118 120 128 128 128 136 138 152 158 160 168 168 168 176 178 184 188 192 8 208 28 216 28 232 88 240 58 248 68 256 68 264 78 272 88 288 108 296 108 312 128 336 188 344 158 368 188 376 188 384 8 392 18 400 28 408 38 416 88 424 88 432 58 440 68 448 78 456 88 464 88 480 108 488 118 496 128 504 128 512 138 520 188 528 158 536 168 544 168 552 178 560 188 568 8 576 18 600 38 608 88 616 58 624 68 632 68 648 88 656 98 664 108 672 108 680 118 688 128 696 138 704 188 720 158 728 168 736 178 744 188 752 188 760 8 776 28 784 38 792 88 808 58 816 68 824 78 832 88 848 98 856 108 864 118 880 128 888 138
--SQL2005環境:
if object_id('Tempdb..#NewYear2208') is not null
drop table #NewYear2208
;with NewYear
as
(select 889 as ID
union all
select ID+1 as ID from NewYear where ID<2208--以2208樓
),NewYear168
as
(select
*,(ID-889)/88 as ID2
from NewYear
where (ID-888)/8=(ID-888)*1.0/8
)
select
t2.ID as [Floor]
,Qty=case row_Number()over(partition by t.ID2 order by newID()) when 1 then 188 when 2 then 88 when 3 then 68 else 0 end
into #NewYear2208
from
(select distinct ID2 from NewYear168)t
cross apply
(select top 8 * from NewYear168 where ID2=t.ID2 order by NewID()
)t2
option(MAXRECURSION 0)
;with HappyNewYear
as
(
select
[Floor],NewRow=row_Number()over(order by newID())
from
#NewYear2208
where Qty=0
)
,NewYear2010
as
(
select * from #NewYear2208 where Qty>0
union all
select [Floor],
Qty=case when NewRow<=3 then 168
when NewRow<=6 then 118
when NewRow<=7 then 108
when NewRow<=8 then 38
when NewRow<=9 then 28
else ((abs(checksum(newID()))-1)-1)%18+1 end
from HappyNewYear
)
select
[Floor]as 樓層,cast(stuff([Qty],len([Qty]),1,'8') as int) as 中獎紅包
from NewYear2010
order by 1
推荐阅读更多>
-
哪位高手有sql server 2005 开发版 下载
-
如何样合并一个表里面的的多行数据(如果不重复则合并,如果重复则舍弃)
-
varchar转datetime解决方案
-
SELECT 条件有关问题2
-
数据库备份计划 -累加方式-按照日期生产新文件
-
,请问1天100万条新数据,放在一台服务器上可行吗
-
问一个两表联合查询的话语! 十分感谢!
-
VC运行之后出现这个,是什么有关问题啊数据库都已经配置好了~
-
原业务系统是基于32位Win2000 的 SQLserver2000 ,现在需要移植到64位的 WIN 2003 Server!该如何处理
-
这种排序 能否实现解决办法
-
KeySet 是什么关键字啊有什么作用?怎么使用?能不能给个例子
-
怎么将批处理(.bat)文件在SQL代理作业命令中执行
-
简单的SQL语句错哪了
-
请问大神,SQL 2005 执行存储过程一直运行,但是不出受影响的行,一直运行不起
-
复原数据库提示:无法装载 DLL Powerd by Nick inc. 或该 DLL 所引用的某一 DLL。原因: 126(找不到指定的模块。)
-
关于游标更新了一个时间目录字段之后。
-
求一sql语句,自己好久没写sql了,快!解决思路
-
sql server2000中varchar类型赋值如何最多只能有255个字节呀
-
SQL 2000 查询之后出现1行被上次查询影响 怎么解决
-
SQL中Select疑难有关问题(distinct column)