1

我有这个选择语句

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

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

注意:从 id 1 到最高的循环将不再起作用,因为 id 的顺序可能会混淆。

有没有办法做到这一点?

谢谢。

4

2 回答 2

0

基本上,您创建一个临时表,其中包含存储过程将返回的列。然后通过执行存储过程作为插入的一部分将数据插入其中。然后,您使用 select 语句而不是 values 语句插入表中。

或者,您可以创建一个不包含存储过程的表值函数,并且只使用一个调用表值函数的选择语句执行插入的一步。

于 2013-05-14T15:19:37.500 回答
0
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

请注意,您需要在输出中包含 HireID。除非使用 ORDER BY,否则没有保证结果集的顺序,因此您不能假设您的百分比列表是有序的

于 2013-05-14T15:09:23.627 回答