2015-11-19 44 views
0

我有一個數字,包含值0和4之間,像這樣的列:SQL服務器 - 申請時到外殼的多個列

ID  Q1 Q2 Q3 Q4 Q5 Q6 ... Q30 
0001 4  0  3  1  0  4   2 
0002 0  2  1  2  0  3   1 
0003 4  2  3  0  3  0   4 
0004 1  4  2  4  1  1   3 

我需要改造這些值,以使得4 = 0,3 -25,2 = 50,1 = 75和0 = 100。

所以,在轉換後的版本我的第一行會顯示如下內容:

ID  Q1 Q2 Q3 Q4 Q5 Q6 ... Q30 
0001 0  100 25 75 100 0   50 

如果它只是一個專欄中,我會用一個case語句:

case 
    when Q1=4 then 0 
    when Q1=3 then 25 
    when Q1=2 then 50 
    when Q1=1 then 75 
    when Q1=0 then 100 
end Q1 

我可以申請這個到一系列的列,而不是爲每一列做一個單獨的case語句?

或者是否有更高效的方式來達到相同的結果?

+0

不,你不能應用大小寫一次去多個列。但是,假設實際邏輯完全如您所示 –

回答

2

這樣寫
條件更加高效,
因爲現在只是一個aritmetical操作,
並與5檢查

SELECT 100 - (q1 * 25) AS Q1 
+0

示例中所示,則可以簡化轉換,非常感謝 – GullitsMullet

1
update yourtable 
set Q1 = 100 - Q1 * 25, 
Q2 = 100 - Q2 * 25, 
Q3 = 100 - Q3 * 25, 
Q4 = 100 - Q4 * 25 
1

然後更好的情況下,想想功能,是這樣的:

CREATE FUNCTION COL_EVAL(@Q1 : int) RETURNS INT AS 
BEGIN 
RETURN case 
    when @Q1=4 then 0 
    when @Q1=3 then 25 
    when @Q1=2 then 50 
    when @Q1=1 then 75 
    when @Q1=0 then 100 
end Q1 
END 

並且終究使用它作爲:

SELECT COL_EVAL(Q1) as Q1, COL_EVAL(Q2).... 

p.s.有沒有服務器來檢查語法的正確性...