2014-10-16 75 views
-2

我必须消除值为X并重复的行。如果他们没有X,他们会留下来,如果他们有X但不会重复他们留下。你能帮忙吗?Oracle:如何选择不重复的行

 
Id  Value   

1.   A.    
2.   X.    
3.   X.    
3.   C.    
3.   D.     
4.   X.  
4.   F 
5.   G 
6.   Z 
7.   X 
8.   X 
8.   G 

从查询结果应该是:

 
1. A 
2. X 
5. G 
6. Z 
7. X 
+1

使用'在选择查询distinct'关键词,如果你想看到独特'Value'列值 – 2014-10-16 17:55:03

+0

我无法理解你的问题,你能解释一下吗?谢谢 – 2014-10-16 17:56:17

+2

SELECT id FROM Table1 GROUP BY Id COUNT(Id)= 1 – radar 2014-10-16 18:05:20

回答

1

也许可以帮助:

SELECT Id, 
     Value 
    FROM(SELECT Id, 
       Value, 
       COUNT(*) OVER (PARTITION BY Id) cnt, 
       SUM(DECODE(Value, 'X', 1, 0)) OVER (PARTITION BY Id) sumx 
     FROM your_table 
    ) 
WHERE cnt = 1 OR sumx = 0; 
+0

我工作完美,谢谢sooo非常..这个社区的规则..!我很感激他们,期待着贡献并付出代价。祝大家有个美好的一天..! :) – TechAider 2014-10-17 13:48:34

1

是不是足够?

SELECT "Id", MIN("Value") "Value" FROM T 
GROUP BY "Id" HAVING COUNT("Id") = 1 
ORDER BY "Id" 

它也会丢弃给定ID的多个唯一非X值。最起码,根据您的样本数据,它似乎产生期望的结果:

ID VALUE 
1 A 
2 X 
5 G 
6 Z 
7 X 

http://sqlfiddle.com/#!4/81baa/10

+0

工作像一个魅力,非常感谢 – TechAider 2014-10-17 12:56:35

+0

(重复的评论,因为感觉是一样的..谢谢)我工作完美,非常感谢你sooo ..这个社区规则..!我很感激他们,期待着贡献并付出代价。祝大家有个美好的一天..! :) – TechAider 2014-10-17 13:49:07