2016-03-31 15 views
0

Birden çok konuma atanan kimlikleri bulmaya çalışıyorum. 26 ve 28 no'lu notların birden fazla kaydı vardır, ancak aynı loc ile sonuç setinde olmasını istemiyorum. Veriler şöyle olabilir:İç içe geçmiş GROUP BY'lere bir alternatif var mı?

Id | loc 
------- 
23 | A 
23 | B 
24 | A 
25 | A 
26 | A 
26 | A 
27 | A 
27 | B 
28 | B 
28 | B 
29 | A 
29 | B 

Ne şu anda yapıyorum geçerli: Buna "hedefini giderir

Id 
-- 
23 
27 
29 
+0

Sizin örnek kod ilk cümlesinde önerilen soruya cevap vermez. –

cevap

1

Birden fazla loc ile kimlikleri arıyoruz:

select id 
from tbl 
group by id 
having count(distinct loc) > 1; 
+0

Harika, ihtiyacım olan buydu. Teşekkürler – simplycoding

0

:

Select id 
FROM (
    Select id, loc, count(*) 
    from tbl 
    GROUP BY id, loc 
    HAVING COUNT(*)>1 
    ) grped 
GROUP BY id 
HAVING COUNT(*)>1 

Ben bu kimlikleri iade çalışıyorum Birden çok konuma atanan kimlikleri bulmaya çalışıyorum. "

select id 
from tbl 
group by id 
having min(loc) <> max(loc); 

Not:

basit bir yolu tek group by kullanan versiyonu sadece başka değer olarak NULL LOCS davranır oysa o, NULL değerlerini yok sayar çünkü bu, sizin mantıktan biraz farklıdır. Yukarıdaki bunu dikkate için değiştirilebilir:

select id 
from tbl 
group by id 
having (min(loc) <> max(loc)) or 
     (min(loc) is not null and count(loc) <> count(*))