我正在尝试将访问代码转换为sql 2008.但是刚发现sql 2008不支持IIF语句!以下是我尝试重写查询的两种方法,我知道我弄乱了语法:
select distinct (IIf(IsNull([dbo_TASK]![act_start_date])
,IIf(IsNull([dbo_TASK]![restart_date]),[dbo_TASK]![target_start_date],[dbo_TASK]![restart_date]),[dbo_TASK]![act_start_date]) AS [Estimated Start Date] from dbo.task
ATTEMPT1:
if dbo.task.act_start_date=null
then
if(dbo.task.restart_date=null)
then dbo.task.target_start_date
else dbo.task.restart_date
else dbo.task.act_start_date
ATTEMP2:
select (case when dbo.task.act_start=null then
(case when dbo.task.restart_date=null
then (dbo.task.target_start_date)
else dbo.task.restart_date
end)
else (dbo.task.act_start_date)
end) from dbo.task
答案 0 :(得分:4)
您的查询非常接近。在检查值是否等于null
时,您使用Is Null
而不是=null
因此,如果您实施,可以使用以下内容:
select distinct
case
when [act_start_date] is null
then
case
when [restart_date] is null
then [target_start_date]
else [restart_date]
else [act_start_date]
end AS [Estimated Start Date]
from dbo.task
甚至更容易使用COALESCE()
,它将返回第一个非空值:
select distinct
coalesce([act_start_date], [restart_date], [target_start_date]) as [Estimated Start Date]
from dbo.task