日期:2014-05-17  浏览次数:20709 次

sql server中如何实现双重for循环
题目:百钱买鸡的问题,公鸡5元一只,母鸡3元一只,小鸡1元三只,问100元钱能买多少只公鸡、母鸡和小鸡。
这个问题用一个双重for循环很快就能解决,可是我在sql server里面没能找到解决办法,用while循环模拟for循环,一层循环还行,二层循环就有问题了,求解答?

------解决方案--------------------
从题目上看:并没有说 1) 公鸡、母鸡和小鸡总数为100,
也没有说 2) 公鸡、母鸡和小鸡数不能为0
在此,我总结了下大家的回答。楼主是否满意呢?
SQL code

---方法一:SQL77的方法
  --drop table #a
select number as x into #a  
from master..spt_values where type='p' and number between 0 and 100--把0到100的数据放入表#a
select 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 #TB
DECLARE @I INT,@J INT,@K INT
CREATE TABLE #TB(I INT,J INT,K INT)
SELECT @I=0,@J=0,@K=0
WHILE @I<100
BEGIN
    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=0
END
--SELECT * FROM #TB WHERE I=0 or J=0 or K=0

------解决方案--------------------
SQL code

/*声明能买的范围表*/
create table #TableNum
(x int )
declare @Num1 int
declare @Num2 int
select @Num1=0 --至少要买
select @Num2=300--最多能买
while @Num1<=@Num2
begin
insert into #TableNum(x) values(@Num1)
select @Num1=@Num1+1
end
select a.x 公鸡,b.x 母鸡,c.x 小鸡 from #TableNum a,#TableNum b,#TableNum c
where 
a.x<=20 
and b.x<=33
and c.x<=300
and 15*a.x+9*b.x+c.x=300  
and a.x+b.x+c.x=100--和起来一共100只鸡
order by a.x,b.x
drop table #TableNum