1

我有带有字段 update_ version 的表,它可以有 null 和一些值..

Select * from Employee where employee_id =  '1234' and updated_version is null

Select * from Employee where employee_id =  '1234' and updated_version ='1'

我必须结合两个查询

我试过这样但没有用。

Select * from Employee 
where employee_id =  '1234' 
and updated_version = (select case when updated_version is null 
                              then NULL 
                              else updated_version 
                              end) 

注意:我将从其他表中获取员工 ID 和更新版本的输入

对困惑感到抱歉。更新后的 Version 值不仅是 1 和 null。它可以是我从另一个表中获得的任何值。因此,无论我从其他表中获得什么值,我都必须在 Employee 表中使用该条件进行查询,以获得适当的结果。不是所有的结果。

4

3 回答 3

2

正如其他人所提到的,对于输出中您想要什么有点不清楚,但是如果我理解正确,您希望将“updated_version”填充到“updated_version”的空行上的行?意思是,您想要最新的“最新”更新版本?(假设对于给定的employee_id,表中有许多版本/行​​)。

尝试(未经测试):

select * from (
  select e.*, row_number() over (partition by employee_id order by updated_version desc nulls last) rnum
  from employee e
  where employee_id = '1234'
)
where rnum = 1;

分区 by 不是严格需要的,因为您只需要 1 个员工 ID,但如果您想将其扩展到多个员工 ID,则需要。

于 2013-07-29T20:03:03.423 回答
1

试试这个查询:

Select * from Employee where employee_id = '1234' and (updated_version ='1' OR updated_version is null) 

编辑:试试这个(未经测试)!

Select * from Employee where employee_id = '1234' and 
CASE updated_version
WHEN '1' THEN '1' 
WHEN Null THEN Null 
ELSE updated_Version
END
于 2013-07-29T19:34:11.627 回答
1

试试这个方法:

Select * from Employee 
where employee_id =  '1234' 
and (updated_version is null or updated_version='1')

编辑:

Select * 
from Employee e
left join other_table ot on ot.employee_id = e.employee_id
                         and ot.updated_version =e.updated_version
于 2013-07-29T19:33:15.700 回答