2016-09-02 8 views
2

Ich habe eine Tabelle mit einer Reihe von Spalten, und ich versuche, eine Abfrage auszuführen, aber ich habe eine schwierige Zeit damit zu kommen. Dies ist, was mein Tisch sieht aus wie ..SQL Server 2008 - Wählen Sie abfrage spezifische Element

clientID  Code 
----------------------- 
17    DAC7 
19    DAC8 
20    TIM19 
21    DAC7 
89    TIM19 

Also hier, ich habe zwei Spalten (es viel mehr ist, aber sie sind eigentlich irrelevant). Das Problem, mit dem ich konfrontiert bin, ist, dass jeder Client einen anderen Code haben sollte, aber es könnte Fälle geben, in denen zwei verschiedene Clients denselben Code haben, und genau das versuche ich zu finden. Wenn Sie oben sehen, haben Client 17 und 21 DAC7, und Client 20 und 89 haben TIM19.

Wie würde ich Abfrage dieser Tabelle mir zu zeigen, nur die Daten, wo es mehr als eine Instanz von CODE, so etwas wie ...

SELECT ClientID, Code 
FROM TblA 
WHERE Count (code) > 1 
ORDER by Code 

Endergebnis Ich hoffe auf ...

17    DAC7 
21    DAC7 
89    TIM19 
20    TIM19 

Antwort

1

Sie können dies auch tun, mit ein IN Aussage:

SELECT clientID, code 
FROM T 
WHERE code IN 
    (SELECT code 
    FROM T 
    GROUP BY code 
    HAVING COUNT(*) > 1) 
ORDER BY code 

Getestet hier: http://sqlfiddle.com/#!9/fd441a/6

3

Sie können die folgende Abfrage mit Code Werte erhalten duplizieren:

SELECT Code 
FROM TblA 
GROUP BY Code 
HAVING COUNT(*) > 1 

Verwendung diese Abfrage als abgeleitete Tabelle können Sie die Original-Tabelle, um auch zu bekommen ClientID Feld JOIN zurück:

SELECT t1.ClientID, t1.Code 
FROM TblA AS t1 
JOIN (
    SELECT Code 
    FROM TblA 
    GROUP BY Code 
    HAVING COUNT(*) > 1 
) AS t2 ON t1.Code = t2.Code 
2

Sie haben die richtige Idee, aber Sie haben zu verwenden GROUP BY... HAVING die doppelten Codes zu erhalten:

SELECT Code 
FROM  TblA 
GROUP BY Code 
HAVING COUNT(*) > 1 

Dann verwenden Sie dies in einer Unterabfrage oder abgeleitete Tabelle, um die ID s zu erhalten.

Subquery Option:

SELECT ClientID, Code 
FROM  TblA 
WHERE Code IN (SELECT Code 
        FROM  TblA 
        GROUP BY Code 
        HAVING COUNT(*) > 1) 
ORDER BY Code 
3

Sie einen Zähler verwenden können() Über()

;With cte_1 
    as 
    ( SELECT ClientID,Code,COUNT(1)OVER(PARTITION BY code order by code) cnt 
    FROM Yourtable) 
    SELECT * 
    FROM cte_1 
    WHERE cn1>1 
4

Verwenden Sie einfach die folgenden:

SELECT ClientID, Code, COUNT(*) AS CNT 
FROM Table 
GROUP BY ClientID, Code 
Having 
COUNT(*) > 1 
+0

Kurz und ordentlich - macht den Job Danke! – BobSki

+1

Mein Vergnügen. Froh, es hat funktioniert :) –

+2

@Bobski Achten Sie darauf, es als die Antwort zu markieren! – CodyMR