我想写一个案例声明,根据条件可以在一行“ 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
答案 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的多行。
鲍比