Sql 对于集合变量,如果

Sql 对于集合变量,如果,sql,sql-server,Sql,Sql Server,因此,我的代码工作完美无瑕,但我需要进行一次升级,我无法理解。 大体上我有一个价格,每年高达2052 40年。我错开这些价格,把开始的一年和5个价格在一个连续的每个ID总共72个ID。我还有一个行号,从550开始,在循环中每次增加2。有一个地区,我知道现在需要增加3每次通过循环。在循环末尾设置变量值时,是否有方法设置IF语句或CASE语句?所以当我设置@LINE=@LINE+2时,我需要一个类似于..的条件 CASE WHEN DISTRICT = 'ALASKA' THEN

因此,我的代码工作完美无瑕,但我需要进行一次升级,我无法理解。 大体上我有一个价格,每年高达2052 40年。我错开这些价格,把开始的一年和5个价格在一个连续的每个ID总共72个ID。我还有一个行号,从550开始,在循环中每次增加2。有一个地区,我知道现在需要增加3每次通过循环。在循环末尾设置变量值时,是否有方法设置IF语句或CASE语句?所以当我设置@LINE=@LINE+2时,我需要一个类似于..的条件

CASE
     WHEN DISTRICT = 'ALASKA'
     THEN @LINE = @LINE + 3
     ELSE @LINE = @LINE + 2
END
这就是我现在正在处理的问题

DECLARE @IDF INT
DECLARE @FLAG INT       
DECLARE @LINE INT
TRUNCATE TABLE #CODE
SET @IDF = 1
WHILE (@IDF < 73)   
BEGIN   
    SET @FLAG = (SELECT min(YEAR) FROM #TABLE1 WHERE ID = @IDF)
    SET @LINE = 550
    WHILE (@FLAG < 2053)
    BEGIN
        INSERT INTO #CODE(ID,DISTRICT,year,LINE,t1,t2,t3,t4,t5)
        SELECT ID,
               DISTRICT,
               year,
               (@LINE) AS 'LINE',
               (SELECT YEARLY_PRICING FROM #TABLE1 b WHERE b.ID = @IDF AND b.YEAR = @FLAG) AS 't1',
               (SELECT YEARLY_PRICING FROM #TABLE1 b WHERE b.ID = @IDF AND b.YEAR = @FLAG+1) AS 't2',
               (SELECT YEARLY_PRICING FROM #TABLE1 b WHERE b.ID = @IDF AND b.YEAR = @FLAG+2) AS 't3',
               (SELECT YEARLY_PRICING FROM #TABLE1 b WHERE b.ID = @IDF AND b.YEAR = @FLAG+3) AS 't4',
               (SELECT YEARLY_PRICING FROM #TABLE1 b WHERE b.ID = @IDF AND b.YEAR = @FLAG+4) AS 't5'
        FROM #TABLE1 WHERE ID = @IDF AND YEAR = @FLAG
    SET @FLAG = @FLAG + 5
    SET @LINE = @LINE + 2
    END
SET @IDF = @IDF + 1
END

他说他现在的密码很好。他下一步需要帮助。@jumpingcode无需挑剔一个短语。Op清楚地解释了他/她需要什么感谢您的快速响应。因为这将超出我的SELECT语句。我怎样才能把它认出来呢?@user2808684好的,你说得对。更新了我的答案,但这假设每行和年份的组合只有一行。如果不是这样的话,那么你需要使用TOP 1或一些逻辑!这正是我所需要的。它正在按预期工作。我在FROM代码中使用了ID号,其中ID=@IDF和YEAR=@FLAG。非常感谢你的帮助。如果我有15个声望,我会投票给你:@user2808684别担心,没问题。以防您不知道,如果答案不一定是我的答案解决了您的问题,那么您不一定要通过单击答案左上角的复选标记将其标记为已接受。
WHILE (@IDF < 73)   
BEGIN   
    SET @FLAG = (SELECT min(YEAR) FROM #TABLE1 WHERE ID = @IDF)
    SET @LINE = 550
    WHILE (@FLAG < 2053)
    BEGIN
        INSERT INTO #CODE(ID,DISTRICT,year,LINE,t1,t2,t3,t4,t5)
        SELECT ID,
               DISTRICT,
               year,
               (@LINE) AS 'LINE',
               (SELECT YEARLY_PRICING FROM #TABLE1 b WHERE b.ID = @IDF AND b.YEAR = @FLAG) AS 't1',
               (SELECT YEARLY_PRICING FROM #TABLE1 b WHERE b.ID = @IDF AND b.YEAR = @FLAG+1) AS 't2',
               (SELECT YEARLY_PRICING FROM #TABLE1 b WHERE b.ID = @IDF AND b.YEAR = @FLAG+2) AS 't3',
               (SELECT YEARLY_PRICING FROM #TABLE1 b WHERE b.ID = @IDF AND b.YEAR = @FLAG+3) AS 't4',
               (SELECT YEARLY_PRICING FROM #TABLE1 b WHERE b.ID = @IDF AND b.YEAR = @FLAG+4) AS 't5'
        FROM #TABLE1 WHERE ID = @IDF AND YEAR = @FLAG

    SELECT @LINE = CASE 
                        WHEN DISTRICT = 'ALASKA'
                        THEN @LINE + 3
                        ELSE @LINE + 2
                    END
    FROM #CODE
    WHERE LINE = @LINE
    AND [YEAR] = @FLAG

    SET @FLAG = @FLAG + 5
    END
SET @IDF = @IDF + 1
END