2016-04-28 77 views
0

我有一個表,並在此表中有時有單個或重複行與1個不同的屬性。該屬性通常爲空或具有值。我如何編寫一個select語句來返回所有沒有重複的數據,並選擇具有該值的數據以及它沒有的數據,然後返回null的屬性。SQL Oracle查詢 - 選擇語句

例如

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  
+0

其值應有所回升,當屬性不爲空? –

+0

你有試過嗎?如果不起作用呢? – Lexi

+0

'你可以通過id,sd'選擇id,sd,max(FEED) –

回答

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 

我明白使用聚合函數max和組,你想要每個組合的(ID,SD)a的所有不同值FEED只有在沒有其他值存在的情況下才爲空。而不是max(),您可以使用min()analytic version

測試:

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 
+0

我花了一些時間弄清楚,但這實際上非常有幫助。謝謝 –

2

您可以通過

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

這隻會返回單頂最大值的結果,它不包括null的或我錯過了什麼? –

+0

應該也返回null ..最終你可以使用nvl() – scaisEdge