请帮助:
我必须根据其他列的表达式
创建一个列但在该表达式命中之前,必须进行日期检查 如果日期在特定日期之前 - 它必须做一个表达式,如果日期在所述日期之后,它必须做另一个表达式,
然后:这是一个唯一的列,其中包含数字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
}
我希望这是有道理的
答案 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;