我想根据条件将查询结果视为“通过”或“失败”

时间:2019-02-06 18:47:22

标签: sql database oracle oracle11g

我想写一个案例声明,根据条件可以在一行“ PASS”或“ FAIL”中看到结果。

select max(a.ODS_Process_Timestamp) from ODS.DW_COUNTRY a where a.ODS_CURRENT_FLAG=1;

此输出为

06-FEB-19 06.25.40.000000000 AM

select a.ODS_Process_Timestamp,a.ODS_CURRENT_FLAG from ODS.DW_COUNTRY a 
where a.ODS_CURRENT_FLAG=1 group by a.ODS_CURRENT_FLAG,a.ODS_Process_Timestamp;

此输出为

ODS_Process_Timestamp                    ODS_CURRENT_FLAG

06-FEB-19 06.25.40.000000000 AM          1

现在,我希望有一个case语句,在这里我将比较第一个查询的max(a.ODS_Process_Timestamp)等于第二个查询ODS_Process_Timestamp,因此它的通过条件否则会失败。

 select case when 
 (select max(a.ODS_Process_Timestamp) from ODS.DW_COUNTRY a where 
 a.ODS_CURRENT_FLAG=1)=(l.ODS_Process_Timestamp from
 (select a.ODS_Process_Timestamp,a.ODS_CURRENT_FLAG from ODS.DW_COUNTRY a 
 where a.ODS_CURRENT_FLAG=1 group by 
 a.ODS_CURRENT_FLAG,a.ODS_Process_Timestamp)l)
 then 'Pass' else 'Fail' 
 end as Timestamp_validation from ODS.DW_COUNTRY;

预期结果应类似于

Timestamp_validation - PASS

1 个答案:

答案 0 :(得分:1)

我不确定这是否是您想要的,但这是一个猜测。我的想法是,您正在尝试查看所有行的最大ODS_Process_Timestamp是否等于ODS_CURRENT_FLAG = 1的一行上的ODS_Process_Timestamp。

create table DW_COUNTRY
(ODS_Process_Timestamp timestamp,
 ODS_CURRENT_FLAG number);

insert into DW_COUNTRY values (systimestamp,1);
insert into DW_COUNTRY values (systimestamp,1);
insert into DW_COUNTRY values (systimestamp,1);
commit;
--host sleep 1
--insert into DW_COUNTRY values (systimestamp,0);
--commit;


select case when 
(select 
 max(a.ODS_Process_Timestamp) 
 from DW_COUNTRY a)=
(select max(ODS_Process_Timestamp)
 from DW_COUNTRY a 
 where a.ODS_CURRENT_FLAG=1)
then 'Pass' else 'Fail' 
end as Timestamp_validation 
from dual;

取消注释注释行以查看失败。

已编辑以处理带有flag = 1的多行。

鲍比