Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如何循环执行select语句?_Sql Server_Sql_Select - Fatal编程技术网

Sql server 如何循环执行select语句?

Sql server 如何循环执行select语句?,sql-server,sql,select,Sql Server,Sql,Select,我有这个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

我有这个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
declare@t表(浮动百分比)
声明@acc INT
设置为@acc=1
声明@max INT
从NewHire中选择@max=max(HireID)

而(@acc作为单一选择,类似于

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

作为单一选择,类似于

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

您考虑过单个SELECT吗?不需要循环。另外,添加存储过程不会增加值。DRY对于SQL代码并不总是好的。如何使用单个SELECT语句实现这一点?另外,我想调用一个存储过程,因为我的asp经典代码调用该存储过程,我不希望在不同的应用程序中使用相同的代码地方。“我不想在不同的地方有相同的代码。”你不应该。每个代码都有不同的功能,所以你没有重复过……而且“我意识到这不是我想做的”=您现在需要什么处理?请停止使用SP_uu作为存储过程名称。这是一种不好的做法,这不是常识吗?OP请阅读您是否考虑过单选?不需要循环。此外,添加存储过程不会增加值。DRY对于SQL CodeH并不总是好的你怎么能用一个select语句来实现这一点呢?另外,我想调用一个存储过程,因为我的asp经典代码调用了该存储过程,我不想在不同的地方有相同的代码。“我不想在不同的地方有相同的代码。”你不应该这样做。每个代码都有不同的功能,所以你没有重复…和“我意识到这不再是我想做的”=您现在需要处理什么?请停止使用SP_u作为存储过程名称。这是一种不好的做法,这不是常识吗?OP请阅读,接近时出现语法错误。接近时出现语法错误。