带有switch case的SQL INNER JOIN和select中的if语句

时间:2014-04-03 13:47:09

标签: sql sql-server

请帮助:

我必须根据其他列的表达式

创建一个列

但在该表达式命中之前,必须进行日期检查 如果日期在特定日期之前 - 它必须做一个表达式,如果日期在所述日期之后,它必须做另一个表达式,

然后:这是一个唯一的列,其中包含数字1-10,每个数字代表不同的表达式。

内部联接和选择行很好,它只是开关和表达式正在击败我

基本上声明需要看起来像这样

select column1 if(date<neededDate)
{select case ExpressionColumn
when 1 //do stuff
when 2 // do stuff
else// do nothing
}


select column1 if(date>neededDate)
{select case ExpressionColumn
when 1 //do stuff
when 2 // do stuff
else// do nothing
}

我希望这是有道理的

3 个答案:

答案 0 :(得分:1)

您需要检查Sql server中的CASE..WHEN..THEN

简单CASE表达式:

CASE input_expression 
     WHEN when_expression THEN result_expression [ ...n ] 
     [ ELSE else_result_expression ] 
END 
Searched CASE expression:
CASE
     WHEN Boolean_expression THEN result_expression [ ...n ] 
     [ ELSE else_result_expression ] 
END

答案 1 :(得分:1)

你的语法有误:

select case sign(datediff('s', date, neededDate)) -- precision: second
           when 0 then -- case missing in your spec !
           else
               case ExpressionColumn
                   when 1 then -- case 1
                   when 2 then -- case 2
                   else -- whatever
               end
       end
  from whatever
     ;

用列上的相应表达式替换每个注释。

在您的情况下,搜索的案例表达可能更方便:

select case 
           when (date < neededDate) then
               -- note the difference: instead of 'case x when y then ...' you write 'case when b then ...'
               case ExpressionColumn
                   when 1 then -- case 1
                   when 2 then -- case 2
                   else -- whatever
               end
           when (date > neededDate) then 
               case ExpressionColumn
                   when 1 then -- case 1
                   when 2 then -- case 2
                   else -- whatever
               end
           else -- this is missing from your spec!

       end
  from whatever
     ;

答案 2 :(得分:1)

你需要在另一个case语句中嵌套两个case语句,它可以像下面这样完成

SELECT CASE WHEN date > neededDate THEN 
                    CASE ExpressionColumn
                        WHEN 1 THEN '1'
                        WHEN 2 THEN '2'
                        ELSE 'null'
                    END
            WHEN date < neededDate THEN 
                    CASE ExpressionColumn
                        WHEN 1 THEN '1'
                        WHEN 2 THEN '2'
                        ELSE 'null'
                    END
            ELSE 'null'
       END
    FROM YourTable;