2012-02-24 56 views
0

不確定這是否可行,但我在表中有一個字段需要通過另一個表中的值進行更新,但引用了特定列,例如如果是1,則獲得的價值了[Jan]柱等提前更新表,但使用列中的值 - 選擇案例

Update table1 
    Set Total = 
     CASE @count 
      WHEN 1 THEN [Jan] 
      WHEN 2 THEN [Feb] 
      WHEN 3 THEN [Mar] 
      WHEN 4 THEN [Apr] 
      WHEN 5 THEN [May] 
      WHEN 6 THEN [Jun] 
      WHEN 7 THEN [Jul] 
      WHEN 8 THEN [Aug] 
      WHEN 9 THEN [Sep] 
      WHEN 10 THEN [Oct] 
      WHEN 11 THEN [Nov] 
      WHEN 12 THEN [Dec] 
     END 
    from table2 

感謝

+0

你試過了(看到你寫的)嗎?我認爲它應該工作。 – Paddy 2012-02-24 10:05:53

+0

爲什麼count被聲明爲變量?桌子應該如何加入?你有任何測試數據和預期結果嗎? Btw稻田 - 答案是否定的,它不起作用 – 2012-02-24 10:25:53

回答

3
Update t 
    Set t.Total = 
     CASE @count 
      WHEN 1 THEN t2.[Jan] 
      WHEN 2 THEN t2.[Feb] 
      WHEN 3 THEN t2.[Mar] 
      WHEN 4 THEN t2.[Apr] 
      WHEN 5 THEN t2.[May] 
      WHEN 6 THEN t2.[Jun] 
      WHEN 7 THEN t2.[Jul] 
      WHEN 8 THEN t2.[Aug] 
      WHEN 9 THEN t2.[Sep] 
      WHEN 10 THEN t2.[Oct] 
      WHEN 11 THEN t2.[Nov] 
      WHEN 12 THEN t2.[Dec] 
     END 
    from table1 t inner join table2 t2 
    on t.ID = t2.ID --your condition 
+0

乾杯維克拉姆,這完美的作品,很高興知道我不是太遙遠 – mailman1979 2012-02-24 10:27:55

3

你可以把CASE在一個子查詢:

UPDATE table1 
SET Total=(SELECT TOP 1 CASE @count 
      WHEN 1 THEN [Jan] 
      WHEN 2 THEN [Feb] 
      WHEN 3 THEN [Mar] 
      WHEN 4 THEN [Apr] 
      WHEN 5 THEN [May] 
      WHEN 6 THEN [Jun] 
      WHEN 7 THEN [Jul] 
      WHEN 8 THEN [Aug] 
      WHEN 9 THEN [Sep] 
      WHEN 10 THEN [Oct] 
      WHEN 11 THEN [Nov] 
      WHEN 12 THEN [Dec] 
     END 
     FROM table2) 
0

你可以使用UNPIVOT

UPDATE Table2 
SET [Total] = 
(
    SELECT B.[Total] 
    FROM 
    (
     SELECT [Jan], [Feb], [Mar], [Apr], [May], [Jun] 
      , [Jul], [Aug], [Sep], [Oct], [Nov], [Dec] 
     FROM Table2 
    ) AS A ([1], [2], [3], [4], [5], [6] 
      , [7], [8], [9], [10], [11], [12]) 
    UNPIVOT ([Total] FOR [Month] IN 
      ([1], [2], [3], [4], [5], [6] 
      , [7], [8], [9], [10], [11], [12])) B 
    WHERE B.[Month] = @count 
)