如何循环选择语句?

时间:2013-05-14 14:46:01

标签: sql-server sql select

我有这个选择陈述

declare @t table (Percentage float)
DECLARE @acc INT 
SET @acc = 1
DECLARE @max INT 
select @max = max(HireID) from NewHire
WHILE (@acc <= @max)
    BEGIN
        IF (@acc in (select HireID from NewHire))
            BEGIN try
                insert into @t  
                select
                    CAST((select COUNT(*) from Hire_Response WHERE HireID = @acc AND (HireResponse = 0 OR HireResponse = 1)) as FLOAT) / 
                    CAST((select COUNT(*) from Hire_Response WHERE HireID = @acc) as FLOAT)
            END try
            begin catch
                insert into @t 
                select 0.0
            end catch
        set @acc = @acc + 1
    END
select * from @t

在这段代码中,我循环遍历所有NewHire记录的id,从1到最高记录。我意识到这不再是我想要做的了。现在基本上我有一个名为sp_selectNewHire2SQL的存储过程,它以特定的方式获取NewHire表。我想调用它,并获取它的返回记录集,然后从上到下循环。

注意:执行从id 1到最高的循环不再有效,因为id的顺序可能会混淆。

有办法吗?

感谢。

1 个答案:

答案 0 :(得分:3)

作为单个SELECT,类似这样的

select
    NH.HireID,
    ISNULL(1E0 *
          COUNT(CASE WHEN HireResponse IN (0,1) THEN HR.HireID END) / 
          NULLIF(COUNT(HR.HireID), 0)
       , 0) AS percentage
from
    NewHire NH
    LEFT JOIN
    Hire_Response HR ON NH.HireID = HR.HireID
group by
    NH.HireID