添加列时SQL中的多个CASE

时间:2014-07-03 15:32:08

标签: php mysql sql pdo

我有一个名为't'的数据库。在't'中有一个名为'y'的列,其中包含一年,以及一个名为'c'的列,其中包含一个整数(名称是为了简化问题)。我正在尝试执行以下操作:

从表格中选择“y”大于1990的所有行,将一个名为“x”的新列添加到选定的行(不是't'表)并检查b,通过以下方式(我用Java编写,因为我无法使SQL CASE工作)

int current_year = (current year...)
if(current_year-year<=8 && c<20000)
x+= ((20000-c)/1000)+1

else if(current_year-year<=12 && c<17000)
x+= ((17000-c)/1000)+1

else if (c<14000)
x+= ((14000-c)/1000)+1

(请注意x + =而不是x =,因为我需要它来处理其他难以解释的事情)

我是SQL的初学者 - 我尝试过编写一个查询但是有很多CASE,我感到困惑,从来没有让它运作良好。此外,我没有设法将“x”列添加到选定的行。唯一有效的部分是

SELECT * FROM t WHERE y>1990

2 个答案:

答案 0 :(得分:3)

你的逻辑会变成这样的东西:

select (x +
         (case when current_year - year <= 8 and c < 20000 then ((20000 - c) / 1000) + 1
          end) +
         (case when current_year - year <= 12 and c < 17000 then ((20000 - c)/ 1000) + 1
          end) +
         (case when (c < 14000) then ((14000 - c)/ 1000) + 1
        ) as x
from . . .

SQL case语句没有改变语句中的值的概念(如+=中所述),因此您只需有条件地添加不同的组件。

答案 1 :(得分:0)

以下声明对我有用:

DECLARE @cy as int


SET @cy = YEAR(GETDATE())

SELECT CASE WHEN @cy-y <=8 AND c<20000
THEN  ((20000-c/1000)+1
ELSE CASE WHEN @cy-y<=12 AND c<17000
        THEN ((17000-c)/1000)+1
        ELSE CASE WHEN c<14000
                THEN ((14000-c)/1000)+1
            END
    END
END AS X