2012-05-08 4 views
7

Ok, damit ich eine Tabelle, in der eine der Spalten ein paar WIEDERHOLUNG Datensätze haben.brauchen alle Spalten auszuwählen, während COUNT/Gruppe mit von

Meine Aufgabe ist es, die Wiederholung Datensätze mit allen Attributen auszuwählen.

CustID FN LN DOB Stadt

die DOB hat einige sich wiederholende Werte, die ich von der gesamten Tabelle auswählen müssen und alle Spalten aller Datensätze aufgelistet, die innerhalb des DOB-Feld gleich sind ..

Meine versuchen ...

Select DOB, COUNT(DOB) As 'SameDOB' from Table1 

group by DOB 

HAVING (COUNT(DOB) > 1) 

das gibt nur zwei Spalten und eine Zeile 1. Spalte ist die DOB-Spalte, die wie viele verlassen gibt mehr als einmal und die zweite Säule auftritt.

Ich muss einen Weg, um herauszufinden, um eine Liste aller Attribute nicht nur diese beiden ...

Bitte leite mich in die richtige Richtung.

+0

Sie listen sie nur alle in der 'SELECT' und vergessen Sie nicht, in die' GROUP BY' aufzunehmen. Fehle ich etwas? Hast du es versucht und es gibt dir nicht das Ergebnis, das du erwartest? –

+0

@PavelVeller - in der Regel, ja, Gruppe funktioniert, aber wenn Sie versuchen, Betrogenen zu finden, die die Gruppe von gegen alle Felder nur zählt zu den unterschiedlichen Zeilen finden, so dass die Zählung innerhalb einer Unterabfrage oder CTE platziert werden muss. –

Antwort

13

Ich denke, eine allgemeinere Lösung Windows-Funktionen sehen, Sie können bedienen:

select * 
from (select *, count(*) over (partition by dob) as NumDOB 
     from table 
    ) t 
where numDOB > 1 

Der Grund Dies ist allgemeiner, weil es leicht ist, zu Duplikaten über zwei oder mehr Spalten hinweg zu wechseln.

+0

müssen Sie auf einem nachlesen mehr Sache ... Partition. Danke ... viel lernen heute Nacht. –

9
Select * 
FROM Table1 T 
WHERE T.DOB IN(Select I.DOB 
       FROM  Table1 I 
       GROUP BY I.DOB 
       HAVING COUNT(I.DOB) > 1) 
+1

Die Verwendung der 'IN' Klausel gegen eine Unterabfrage kann ziemlich langsam sein, nur ein FYI. –

+0

Beachten Sie auch, dass Sie Ihre FROM-Klausel in der Unterabfrage vergessen haben ... –

+1

@ChrisGessler. Das Problem wurde behoben, aber ich bin mir nicht sicher, ob "IN" langsamer ist. – gdoron

4

Versuchen Sie, mit einer Unterabfrage Verbindung, die auch die Zählung

select t.*, a.SameDOB from Table1 t 
join (
    Select DOB, COUNT(DOB) As 'SameDOB' from Table1 
    group by DOB 
    HAVING (COUNT(DOB) > 1) 
) a on a.dob = t.dob 
+0

Ahh ... das funktioniert. Ich bin immer noch ein Neuling, wenn es um Unterabfrage geht. Ich denke, ich muss mich in den nächsten Tagen auf das wirklich Schwer konzentrieren.Ich muss ein Buch finden, das das detailliert abdeckt. –

+0

@JohnSmith - MSDN ist ein gutes Buch, wenn Sie etwas Freizeit haben. –

+0

Nun ist der andere Teil, finden Sie den jüngsten Kust und listen alle Kust mit diesem DOB. Mit anderen Worten, ich werde MINDESTENS einen Datensatz in der Entität mit allen Attributen haben .... –

-1
select * 
from table1, (select count(*) from table1) as cnt 
+1

Bitte geben Sie Ihren Code mit der richtigen Erklärung. Nur Code-Antworten werden nicht geschätzt. –

Verwandte Themen