SQL:在局部变量中指定结果,并在when条件中使用它

SQL:在局部变量中指定结果,并在when条件中使用它,sql,Sql,我有一个问题如下 SELECT name from Employee WHERE Emp_id =? AND joining_DATE >= case when (select max(joining_date) from Employee where emp_id = ? then (select max(joining_date) from Employee where emp_id = ? else 'start date' end 在这里,

我有一个问题如下

SELECT name from Employee 
WHERE Emp_id =?

   AND joining_DATE >= 
   case when (select max(joining_date) from Employee where emp_id = ? 
    then (select max(joining_date) from Employee where emp_id = ? 
    else  'start date' end
在这里,如果您看到相同的查询在case when和then中执行了两次。如果可能的话,我只想执行一次。如果不可能,则至少可以采取任何措施,仅执行一次max(工资)

提前谢谢。

我想你应该用“with”子句


您能描述一下您想要的输出吗?因为您的查询令人困惑!你的案件陈述毫无意义?你需要解释你想要实现什么。我的问题是,我想执行查询,以防只执行一次而不是两次。如果不可能,则至少max()查询一次。我知道我可以用PL/SQL做到这一点,但我不想用PL/SQL。我希望这能澄清你的问题。@Ritesh尝试展示一些示例输入和预期输出。您目前的查询非常混乱。您使用的是什么数据库系统?您提到的是PL/SQL-我认为该术语在Oracle和Postgres中都有使用,可能还有其他的-您能为您的特定系统添加一个标记吗?谢谢Franek,子句起作用了,但不像您的示例中那样。它将maxemp视为一个视图,并从select查询的in from和where子句中获取数据。我编辑了你的回复,以了解它对我的作用。
WITH maxemp AS
 (select max(joining_date) as maxdate from Employee where emp_id = ?)
 SELECT name from Employee 
WHERE  joining_DATE >= 
 case maxemp.maxdate 
then maxemp.maxdate 
else  start_date end