2013-10-07 138 views
1

給定一個表:更新使用case語句

ColumnPosition, ColumnName 
    Col 1,   NULL 
    Col 2,   NULL 
    Col 3,   NULL 

我想根據基於ColumnPosition預定值映射到更新ColumnName

例如:
如果ColumnPosition = '西1' 然後更新的ColumnName是 '名稱' 如果ColumnPosition = '西3' 然後更新的ColumnName是 '地址'

這怎麼可能使用CASE語句完成?

+1

你沒有。您無法選擇案例中的列名稱。 – GolezTrol

+0

我看到想要這樣做的小邏輯。即使在不合邏輯的時刻,我也不想這樣做。你用這個'erm解決方案試圖解決什麼問題? –

+0

@TonyHopkinson - 它的漫長故事:) – Steam

回答

6

我想你的意思UPDATE而不是INSERT

UPDATE MyTable 
SET ColumnName = CASE WHEN ColumnPosition = 'Col 1' THEN 'Name' 
         WHEN ColumnPosition = 'Col 3' THEN 'Address' 
         -- ... the rest of your conditions 
         ELSE -- put your default value here 
       END 
+0

哦,是的。更新是正確的詞。 – Steam

+0

現在,我正在寫OO代碼來生成70+ WHEN語句:)這段代碼會很大:(除非,conrad的代碼可以修改爲給我預期的輸出 – Steam

5

而不是做了一堆case語句,你可以建立一個地圖,然後做一個連接

With Map as 
(
    SELECT  'Col 1' ColumnPosition , 'Name' as ColumnName 
    UNION SELECT 'Col 3' , 'Address' 
) 
UPDATE Table1 
SET Table1.ColumnName = Map.ColumnName 
FROM 
    table1 
    INNER JOIN MAP 
    ON Table1.ColumnPosition = Map.ColumnPosition; 

DEMO

+0

+1 - 我喜歡答案你如何做一個更好的設計。好的一個:-) –

+0

謝謝,但它沒有按預期工作。它應該設置每一次出現的情況,比如第3列的地址或您決定的任何事情。列3在列中出現多次,其他值也會出現多次。 – Steam

+1

@blasto'Col 3'多次出現。 [這是一個演示](http://sqlfiddle.com/#!3/7ecee/1),其中最初的數據集包含col3上的模糊。簡單的例子可能會丟失一些東西 –