2013-10-23 106 views
0

所以我的代碼工作完美無瑕,但我需要進行一次升級,而且我無法確定它。 基本上。我每年的價格高達2052年(40年)。我stag these這些價格,將每個ID的起始年份和5個價格連成一排(共72個ID)。我也有一個行號,從550開始,每次循環增加2。有一個地區(我現在知道的)每次在循環中需要增加3個區域。當您在循環結束時設置變量值時,是否有辦法設置IF語句或CASE語句?所以,當我去「SET @LINE = @LINE + 2」我需要爲是類似的條件..IF對於SET變量

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 
+0

他目前的代碼是罰款他的說法。他想要幫助下一步。 –

+1

@jumpingcode不需要挑選一個短語。 Op明確解釋了他/她需要什麼 – Lamak

回答

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 

    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 
+0

感謝您的快速回復。因爲這將在我的SELECT語句之外。我怎麼會認識DISTRICT。 – Hallel86

+0

@ user2808684好吧,你是對的。更新了我的答案,但是這假設每個'LINE'和'YEAR'的組合只有一行。如果情況並非如此,那麼您需要使用「TOP 1」或其他邏輯。 – Lamak

+0

完美!這正是我需要的。它按預期工作。我在「FROM #CODE WHERE ID = @IDF AND YEAR = @FLAG」中使用了ID號碼。非常感謝你的幫助。如果我有15的聲望,我會upvote你:) – Hallel86