2016-08-17 5 views
0

Ich versuche, die Struktur meiner TabelleSQL Server-Abfrage verschiedene

Recno  ClientNo  ServiceNo 
--------------------------------- 
1234  17   27 
2345  19   34 
3456  20   33 
4567  17   34 

Ich versuche RecNo jedoch zu wählen, Filterung durch verschiedene ClientNo, eine Abfrage in SQL Server 2008. Dies ist zu tun, damit für einige Clients wie Client Nr. 17 - sie haben mehr als 1 Eintrag, ich versuche, diesen Client nur einmal zu zählen. Wenn ich diesen Tisch betrachte, sollte ich nur 3 RecNo's sehen, da es nur 3 verschiedene Clients gibt. Bitte helfen

Select RecNo, Count(ClientNo) 
from TblA 
where Count(clientNo)<2 

So etwas wie das?

EDIT:

Der Wert RecNo nicht relevant ist, ich brauche nur eine genaue Anzahl der Datensätze haben. In diesem Fall hätte ich gerne 3 Datensätze.

+0

Haben Sie eigentlich die 'Recno' Werte müssen ?, oder nur die Anzahl? – Lamak

+0

Um zu wiederholen, was @Lamak gesagt hat, interessiert es dich, welche "Recno" du für irgendeine gegebene Kundennummer bekommst? Wenn nicht, könntest du eine 'Gruppe von 'zusammen mit einem' min' oder 'max' auf' Recno' machen. – mituw16

+0

@Lamak - ja, ich will aber nicht COUNT von ihnen. – BobSki

Antwort

2

oaky werden Sie einige verrückte Antworten bekommen wahrscheinlich das gewünschte Ergebnis becuase ist so nicht klar Ich schlage vor, wenn einige von ihnen nicht das sind, was Sie brauchen, dass Sie Ihr gewünschtes Ergebnis klären.

Wenn Sie die Antwort 3 wollen, kann ich nur annehmen, dass Sie eine Zählung von DISTINCT ClientNo's wünschen, wenn es so einfach Aggregation ist.

SELECT COUNT(DISTINCT ClientNo) as ClientNoDistinctCount 
FROM 
    TblA 
GROUP BY 
    ClientNo 
+0

Aber das ist nicht das, was OP will. Op möchte die Anzahl der Recno-Werte zählen, wo Sie verschiedene Clients haben können, das ist nicht das gleiche wie das Zählen von verschiedenen ClientsNein – Lamak

+0

@Lamak Ich verstehe Ihre Aussage, aber ich bin nicht sicher, ob das OP angibt, was sie wirklich wollen, wenn Sie das lesen Satz "Ich soll nur 3 RecNo's sehen, da es nur 3 verschiedene Kunden gibt" scheint es, als ob er nur nach verschiedenen Kunden sucht, also biete ich dies als eine Antwort an, wenn das OP nur die Dinge falsch formuliert – Matt

+0

Aber die Frage sagt, dass: 'Ich versuche, RecNo, jedoch Filterung durch unterschiedliche ClientNo' – Lamak

1

Ok, dies wird Ihnen die Zählung, die Sie wollen:

WITH CTE AS 
(
    SELECT *, 
      RN = ROW_NUMBER() OVER(PARTITION BY ClientNo ORDER BY Recno) 
    FROM TblA 
) 
SELECT COUNT(DISTINCT Recno) N 
FROM CTE 
WHERE RN = 1; 
1

die Sie interessieren ..

;with cte1 
    As(SELECT Recno,clientno 
    ,row_number() over(partition by clientno order by Recno)RNO FROM TblA) 
    Select Recno,clientno 
    From cre1 where RNO=1 
1

wählen ClientNo nur die max Recno (oder ersetzen < mit > die min zu wählen).

Select * 
from TblA t1 
where not exists(select 1 
     from TblA t2 
     where t1.ClientNo = t2.ClientNo and t1.Recno < t2.Recno) 

BTW, die andere Lösung bereits erwähnt, row_number() braucht keine CTE in diesem Fall unter Verwendung

SELECT TOP(1) WITH TIES * 
FROM TblA 
ORDER BY ROW_NUMBER() OVER(PARTITION BY ClientNo ORDER BY Recno) 
Verwandte Themen