【问题标题】:I want to see the result of my query as 'pass' or 'fail' based on the condition我想根据条件查看查询结果为“通过”或“失败”
【发布时间】:2019-02-06 18:47:21
【问题描述】:

我想写一个case语句,我可以根据条件在一行“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 AD Andorra Europe ROW No No 01-JAN-00 12.00.00.000000000 AM 31-DEC-18 12.00.00.000000000 AM 0 08-MAR-16 08.35.00.322125000 PM 0

标签: sql database oracle oracle11g


【解决方案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 的多行。

鲍比

【讨论】:

  • 我想要和你建议的一样,但是在对你的查询进行一些更改后,我得到了多行,但我只需要一行说 timestamp_validation=pass
  • 通过通过通过通过通过通过通过
  • 好的。我对其进行了编辑,以从标志为 1 的所有行中取出最大时间戳。我只是不确定你想要什么。
  • select case when (select max(a.ODS_Process_Timestamp) from DW_COUNTRY a where a.ODS_CURRENT_FLAG=1)=(select l.ODS_Process_Timestamp from (select a.ODS_Process_Timestamp,a.ODS_CURRENT_FLAG from ODS.DW_COUNTRY a其中 a.ODS_CURRENT_FLAG=1 由 a.ODS_Process_Timestamp,a.ODS_CURRENT_FLAG)l) 分组,然后“通过”否则“失败”以来自 ODS.DW_COUNTRY a 的 Timestamp_validation 结束;
  • 是的,它奏效了。我只是根据您的建议更改它并且它有效。
猜你喜欢
  • 2020-08-28
  • 2019-11-18
  • 1970-01-01
  • 2014-04-30
  • 2022-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多