从表Oracle SQL中进行条件选择

时间:2017-07-17 18:30:59

标签: sql oracle

我有一个包含列值,id,h(层次结构)和日期列的表。它的快照如下所示:

value | id  | h  | date 
---   |---  |--- |------------
 1.0  | 32  | 0  | Jul 3, 2017
 5.6  | 54  | 1  | Jul 2, 2017
 3.5  | 178 | 2  | Jul 3, 2017
 3.4  | 178 | 2  | Jul 1, 2017

此表没有主键(也就是每个值,id,h或日期有多个记录)。 id和h有一对一的关系。

我想编写一个查询,以便假设今天是7月3日,它将为今天的每个id返回一个值,按h排序,如果今天没有该id的记录,则显示空值。又像这样

value | id  | h  
---   |---  |--- 
 1.0  | 32  | 0  
 null | 54  | 1  
 3.5  | 178 | 2  

3 个答案:

答案 0 :(得分:1)

执行左连接可能会有所帮助: -

Select b.value,a.id,a.h
from 
(Select distinct id,h 
from <table>) a 
left join
(Select id,h,value 
from <table> where date > trunc(SYSDATE)) b
on a.id = b.id
and a.h = b.h;

答案 1 :(得分:0)

您可以使用CASE语句为第一列实现条件IF-ELSE逻辑:

  select 
        // if current date is the same as date in date_col output value
     case when sysdate - date_col < 1 then value
        // else output null
     else null end "value", 
     id, h
  from my_table
  order by 3; // sort by h column

答案 2 :(得分:0)

使用分析函数和case语句,可以实现结果。假设列h永远不会有负值,这里是查询:

raw

输出:

cat < /dev/ttyS5