我有许多列包含0到4之间的值,如下所示:
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
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
答案 1 :(得分:1)
update yourtable
set Q1 = 100 - Q1 * 25,
Q2 = 100 - Q2 * 25,
Q3 = 100 - Q3 * 25,
Q4 = 100 - Q4 * 25
答案 2 :(得分: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。没有服务器来检查语法正确性......