2014-07-09 140 views
1

比方說,我有一個表像下面:選擇行,其中有重複列

Name Score 
----- ----- 
Don 3 
Don 4 
Don 0 
Pat 3 
Cat 5  

如何編寫一個查詢,將篩選出名在比分是0?即:在上表中,查詢不能返回名稱「唐」以來,爲行唐的一個包含0。(我使用的是Oracle數據庫BTW)

+0

刪除'plsql'標記(並用'oracle'替換它),因爲沒有跡象表明PL/SQL實際上是解決方案所需要的。 –

回答

2
select name 
from your_table 
group by name 
having sum(case when score = 0 then 1 else 0 end) = 0 
+0

謝謝!出於好奇,有沒有其他辦法可以做到這一點?我在查詢中將此解決方案用作子邏輯,並且遇到了一些困難。在我的項目中有一個與年份相似的表格。我試圖獲得一個人在某一年有一定得分的行,但從來沒有一個0.所以我想知道如何將這個包含在我的where條件中。 – Devin

+0

如果這個查詢不適合你,那麼應該問一個新的問題與確切的要求。單獨從你的評論我不知道你的問題是什麼。 –

0

,通常跳第一個解決方案對那些頭腦是一些與EXISTS

SELECT * 
FROM players p1 
WHERE NOT EXISTS (
    SELECT 1 
    FROM players p2 
    WHERE p1.Name = p2.Name 
    AND p2.Score = 0 
) 

這裏有一個SQLFiddle showing it in action,返回

| NAME | SCORE | 
|------|-------| 
| Cat |  5 | 
| Pat |  3 | 
0

這個答案是相似的,但如果你想其他的方法:

select Name 
from T1 
group by Name 
having Min(Score) > 0; 

這假設Score不能是負面的,從上下文來看,這看起來像一個非常安全的假設。如果您想忽略零分或更低分數的任何人,它仍然可以工作。如果您只想忽略零但仍然通過負值,則將測試更改爲having Min(Abs(Score)) > 0