So finden Sie mehrere Duplikate unter zwei Spalten

Ich habe eine SQL server-databasetabelle Inventory mit zwei Spalten hospital_id und location_id , die mich interessieren. Einzeln können sie jeweils Duplikate haben.

Ich möchte herausfinden, hospital_id 's, die mehrere location_id ' s geordnet haben

Zum Beispiel sind das meine Spalten:

Bildbeschreibung hier eingeben

Ausgang sollte sein:

Bildbeschreibung hier eingeben

Ich glaube, Sie wollen Duplikate von hospital_id / location_id Paare. Ich bin mir nicht sicher, warum du nur die hospital_id ausgibst, aber du kannst es tun

 select hospital_id from t group by hospital_id, location_id having count(*) > 1; 

Aktualisieren:

Als Alternative zu Gordons Abfrage könntest du leicht die Antwort ändern, die @JuergenD und ich anfangs gaben:

 SELECT hospital_id FROM yourTable GROUP BY hospital_id HAVING COUNT(*) - COUNT(DISTINCT location_id) >= 1 ORDER BY hospital_id 

Ein Krankenhaus, das irgendwo in doppelter Stelle hat, hätte eine Gesamtzahl, die größer ist als die DISTINCT Zählung.

 select hospital_id, count(location_id) as locationcount from tab2 group by hospital_id having count(location_id) > 1 order by hospital_id 

Ein weiterer path:

 SELECT TOP 1 WITH TIES hospital_id --, location_id --if you need FROM Inventory ORDER BY CASE WHEN ROW_NUMBER() OVER (PARTITION BY hospital_id, location_id ORDER BY location_id) = 2 THEN 0 ELSE 1 END ASC 

Es wird alle hospital_id s mit mindestens 2 doppelten Zeilen zeigen.

 SELECT a.hospital_id FROM ( SELECT hospital_id, COUNT(location_id) location_count FROM Inventory GROUP BY hospital_id HAVING COUNT(location_id) > 1 ) a ORDER BY hospital_id 

Siehst du wie mehr Standorte für Krankenhaus und mehr Krankenhaus und Standorte aus?

 ;with cte as ( select hospital_id,'' locaation_id, count(location_id) as locationcount from tab2 group by hospital_id having count(location_id) > 1 union all select hospital_id, location_id, count(*) as cnt from tab2 group by hospital_id, location_id having count(*) > 1 ) select * from cte order by hospital_id 

In der Auswahlliste von CTE können Sie hospital_id nur auswählen, wenn Sie benötigen

 select hospital_id, location_id into #temp1 from inventory where hospital_id in ( select hospital_id from inventory group by hospital_id having count(hospital_id)>1) group by hospital_id,location_id select hospital_id from #temp1 group by hospital_id having count(hospital_id)>1