|
|
Posted on
2009-10-22 15:08
杨彬Allen
阅读( 190)
评论()
收藏
举报
 Code
--隨即選擇一個和為500的組合
declare @tb table(id int,num int)
insert into @tb select 1,1000
insert into @tb select 2,100
insert into @tb select 3,500
insert into @tb select 4,200
insert into @tb select 5,200
insert into @tb select 6,50
insert into @tb select 7,150
insert into @tb select 8,80
insert into @tb select 9,70
declare @idtb table(id int)
declare @num int,@id int,@sum int

set @sum=0
while @sum<>500
begin
print @sum
select top 1 @id=id,@num=num from @tb where num<=500 order by newid()

if @num=500
begin
insert into @idtb select @id
--print @id
 /**//*@id只會是3*/
end
else
begin
if not exists(select 1 from @idtb where id=@id)
insert into @idtb select @id
--print @id
end

select @sum=sum(num) from @tb where id in(select id from @idtb)
--print @sum

if(@sum>500)
delete @idtb
end
select * from @tb where id in(
select id from @idtb)
 注意
注: 1.Sql中的if……else……
if或else下面除非使用陳述式區塊,如begin……end,否則if后else前只能跟一條sql語句.else后只認最近的一條sql語句.
example:
if Boolean_expression
begin--有陳述式區塊,則可以跟多條sql.
insert into ……
update ……
end
else--無陳述式區塊,則只認最近的一條語句:如下面的insert into……,后面的update則跳出了if……else……的范圍
insert into ……
update ……
2.select @sum=sum(num) from @tb where id in(select id from @idtb)
也許你會有誤解:這個@sum=sum(num)會不會累加,不會的,如果是@sum=@sum+sum(num)就是累加了.

3.這段sql并不能求出小于500的組合,而且即使是等于500的組合,這個算法也不怎么樣.改改數字讓它找不到一處等于500的,就會一直跑直到耗光server的資源.
|