SQL Oracle查询 - 选择语句

时间:2016-04-28 13:18:27

标签: sql oracle

我有一张桌子,在这张桌子中,有时会有单行或重复的行,其中包含1个不同的属性。此属性通常为null或具有值。如何编写一个select语句来返回没有重复项的所有语句,并选择具有该值的数据及其不存在的数据,然后返回null属性。

e.g。

ID   SD     FEED
0016 21AE   GF-HF   
0016 21AE   null
0017 21BE   FF-HF   
0017 21BE   null
0018 21CE   CF-HF   
0018 21CE   null
0019 21DE   null    
0019 21DE   null

应该从select语句返回:(没有重复)

ID   SD     FEED
0016 21AE   GF-HF   
0017 21BE   FF-HF   
0018 21CE   CF-HF   
0019 21DE   null    

2 个答案:

答案 0 :(得分:2)

您可以使用聚合函数max和group by

select id, sd, max(feed) 
from my_table
group by id, sd;

答案 1 :(得分:1)

select distinct id, sd, feed
  from (select id, sd, feed, max(feed) over(partition by id, sd) as mf from t)
 where (feed is not null and mf is not null)
    or (feed is null and mf is null)
 order by id, sd, feed

我明白,只有当没有其他值存在时,您希望(FEEDID)的每个组合的SD的所有不同值和空值。您可以在analytic version中使用max()而不是min()

测试:

create table t ( ID varchar2(10), SD varchar2(10), FEED varchar2(10));
insert into t values (0016, '21AE', 'GF-HF' );
insert into t values (0016, '21AE', 'GF-HF' );
insert into t values (0016, '21AE', 'AF-AF' );
insert into t values (0016, '21AE', null );
insert into t values (0017, '21BE', 'FF-HF' );
insert into t values (0017, '21BE', null );
insert into t values (0018, '21CE', 'CF-HF' );
insert into t values (0018, '21CE', null );
insert into t values (0019, '21DE', null );
insert into t values (0019, '21DE', null );

ID         SD         FEED
---------- ---------- ----------
16         21AE       AF-AF
16         21AE       GF-HF
17         21BE       FF-HF
18         21CE       CF-HF
19         21DE