看看这样行不行:
Select 丙.姓名,丙.消费金额,乙.任务类别,乙.任务阶段
,当前任务进度=Case When a.任务名称='exception_end' Or Not 丙.结束时间 Is Null
Then '终止' Else 乙.任务名称 End
From 丙
Left Join (Select * From 甲 Where 项目编码+任务变化编码 In
(Select 项目编码+Max(任务变化编码) From 甲
Group by 项目编码 ) ) a
On a.项目编码=丙.项目编码
Left Join 乙 On a.任务名称=乙.任务名称 And 丙.任务类别ID=乙.任务类别ID
不过这里有个问题,既然张三对应的甲表的任务名称是exception_end, 那么在乙表中应该找不到它的对应的任务阶段,为什么你<想要得到的表>中张三的任务阶段是<饮食>呢?