2017-01-06 2 views
0

Say I enthält die folgende TabelleWählen wo feldspezifische Artikel und andere

ID | Trans_id 
1 | 10 
2 | 20 
2 | 20 
2 | 20 
2 | 20 
2 | 10 
3 | 20 
4 | 20 
5 | 10 
6 | 10 

Wie kann ich die ID wähle wo trans_id enthält 20 und wieder eine neue Nummer hat, egal, was es ist (in In diesem Beispiel sollte ich nur ID 2 zurückgeben)?

Antwort

2

können Sie verwenden Aggregation und having:

select id 
from t 
group by id 
having sum(case when trans_id = 20 then 1 else 0 end) > 0 and 
     sum(case when trans_id <> 20 then 1 else 0 end) > 0; 
2

Oder verwenden exists

Select distinct Id from table t 
Where trans_id = 20 
    and exists (Select * from table 
       Where ID = t.Id 
        and trans_id != 20) 
1

Sie diese Abfrage verwenden:

SELECT ID 
FROM Table1 
WHERE ID IN (SELECT DISTINCT ID FROM Table1 WHERE Trans_id = 20) 
GROUP BY ID 
HAVING COUNT(DISTINCT(Trans_id)) > 1 

Die Unterabfrage wählt nur IDs, die Trans_id = 20 enthalten , die GROUP BY ID + HAVING COUNT(DISTINCT(Trans_id)) > 1 stellt sicher, dass es andere Trans_ids in dieser Gruppe gibt.

-1

das funktionieren wird:

SELECT DISTINCT ID FROM MyTable WHERE Trans_id = 20 
+0

Nein, es wird nicht. Im OP-Beispiel wird es zurückgeben '2, 3, 4 ', 3 und 4 sind falsch, weil es keine anderen Trans_IDs gibt –

Verwandte Themen