sql server中如何实现双重for循环
题目:百钱买鸡的问题,公鸡5元一只,母鸡3元一只,小鸡1元三只,问100元钱能买多少只公鸡、母鸡和小鸡。
这个问题用一个双重for循环很快就能解决,可是我在sql server里面没能找到解决办法,用while循环模拟for循环,一层循环还行,二层循环就有问题了,求解答?
[解决办法]
从题目上看:并没有说 1) 公鸡、母鸡和小鸡总数为100,
也没有说 2) 公鸡、母鸡和小鸡数不能为0
在此,我总结了下大家的回答。楼主是否满意呢?
---方法一:SQL77的方法 --drop table #aselect number as x into #a from master..spt_values where type='p' and number between 0 and 100--把0到100的数据放入表#aselect a.x,b.x y,c.x z from #a a,#a b,#a c where 5*a.x+3*b.x+1.0*c.x/3=100 --筛选出符合要求的组合数--方法二:ssp2009的方法 --DROP TABLE #TBDECLARE @I INT,@J INT,@K INTCREATE TABLE #TB(I INT,J INT,K INT)SELECT @I=0,@J=0,@K=0WHILE @I<100BEGIN WHILE @J<100 BEGIN WHILE @K<100 BEGIN IF(@I*5+@J*3+@K*1.0/3=100) BEGIN INSERT INTO #TB(I,J,K) VALUES(@I,@J,@K) END SET @K=@K+1 END SELECT @J=@J+1,@K=0 END SELECT @I=@I+1,@J=0,@K=0END--SELECT * FROM #TB WHERE I=0 or J=0 or K=0
[解决办法]
/*声明能买的范围表*/create table #TableNum(x int )declare @Num1 intdeclare @Num2 intselect @Num1=0 --至少要买select @Num2=300--最多能买while @Num1<=@Num2begininsert into #TableNum(x) values(@Num1)select @Num1=@Num1+1endselect a.x 公鸡,b.x 母鸡,c.x 小鸡 from #TableNum a,#TableNum b,#TableNum cwhere a.x<=20 and b.x<=33and c.x<=300and 15*a.x+9*b.x+c.x=300 and a.x+b.x+c.x=100--和起来一共100只鸡order by a.x,b.xdrop table #TableNum