SQL Server - 适用于多列时的情况

时间:2015-11-19 10:42:08

标签: sql-server

我有许多列包含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语句吗?

或者是否有更有效的方法来实现相同的结果?

3 个答案:

答案 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。没有服务器来检查语法正确性......