【问题标题】:How do I create a conditional SQL query如何创建条件 SQL 查询
【发布时间】:2015-10-07 20:59:41
【问题描述】:

我正在尝试使用 IF/Else 语句创建 Oracle Sql 查询

IF EXISTS 
  ( 
         SELECT * 
         FROM   baninst1.an_employee_position 
         WHERE  baninst1.an_employee_position.person_uid = 593791 
         AND    baninst1.an_employee_position.position_end_date IS NULL) THEN 
  SELECT * 
  FROM   baninst1.an_employee_position 
  WHERE  baninst1.an_employee_position.person_uid = 593791 
  AND    ( 
                baninst1.an_employee_position.position_end_date IS NULL 
         OR     baninst1.an_employee_position.position_end_date > SYSDATE) 
  AND    baninst1.an_employee_position.effective_start_date <= SYSDATE;ELSE 
  SELECT * 
  FROM   ( 
                SELECT * 
                FROM   baninst1.an_employee_position 
                WHERE  baninst1.an_employee_position.person_uid = 593791 ) 
  WHERE  ROWNUM = 1;END IF;

但是,当我运行它时收到“未知命令”错误。没有更多错误信息

【问题讨论】:

  • 你到底想达到什么目的?
  • 我想知道员工是否活跃,如果他们不活跃,员工最后担任的职位。此表包含员工担任的每个职位的记录。当 position_end_date 为空时,这就是员工的当前职位。如果 position_end_date 不为空,则该员工已被终止,但为了获得最后一个职位,我必须按 Effective_start_date 排序并选择第一个。
  • Oracle SQL 没有 IF ELSE,它有 CASE 和 DECODE。 PLSQL 有 IF ELSE 和 SWITCH 语句

标签: sql oracle syntax conditional


【解决方案1】:

这可能会提供您正在寻找的内容:

SELECT a.* 
 FROM employee_position a
where person_uid = 593791
and (
      (a.position_end_date is null)
      or
      (
        a.position_end_date =
        (select max(position_end_date)
         from employee_position b
          where b.person_uid = a.person_uid
          and b.position_end_date is not null
        )
      )
    )

另一种方式

SELECT a.* 
 FROM employee_position a
where person_uid = 593791
and (
      nvl(a.position_end_date, trunc(sysdate+100)) >= 
      (select max(position_end_date)
       from employee_position b
       where b.person_uid = a.person_uid
       and b.position_end_date is not null
      )
    )

【讨论】:

    猜你喜欢
    • 2012-12-07
    • 1970-01-01
    • 1970-01-01
    • 2020-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-29
    • 2021-06-10
    相关资源
    最近更新 更多