2013-02-12 43 views
4

如何僅選擇標誌值因同一名稱而異的名稱?找到列值變化的地方

name flag 
ben  0 
harry 1 
harry 1 
harry 1 
john 1 
john 0 
john 1 
krishna 1 
krishna 1 
luke 0 
steve 1 
steve 0 

結果應該選擇約翰和史蒂夫

+0

對不起,意味着工作得非常好同名 – 2013-02-12 10:32:45

回答

7

您可以使用這將組由name數據並計算不同的標誌值以下。如果count大於1那麼他們有不同的標誌:

select name 
from yourtable 
group by name 
having count(distinct flag) > 1 

SQL Fiddle with Demo

如果你想在這個擴展,包括附加列在表中,那麼你可以使用:

select t1.name, t1.flag 
from yourtable t1 
where exists (select name 
       from yourtable t2 
       where t1.name = t2.name 
       group by name 
       having count(distinct flag) > 1) 

SQL Fiddle with Demo

這將返回的名稱和標誌:

| NAME | FLAG | 
---------------- 
| john | 1 | 
| john | 0 | 
| john | 1 | 
| steve | 1 | 
| steve | 0 | 
+0

變化。 SQL小提琴也非常好:)。是否有可能在結果中列出:約翰1 約翰0 約翰1史蒂夫1 史蒂夫0 – 2013-02-12 10:42:07

+0

@SantoshPillai看到我編輯與不同版本的查詢 – Taryn 2013-02-12 10:45:47

+0

謝謝。完美的作品。你能解釋你如何使用t1和t2嗎? – 2013-02-12 10:54:09

4

嘗試以下操作:

SELECT DISTINCT t1.Name 
FROM Table t1 
INNER JOIN Table t2 ON t1.Name = t2.Name 
WHERE t1.flag <> t2.flag