2009-06-01 7 views
1

Hier ist der Code, den ich geschrieben habe, ein Szenario zu erstellen:SQL-Select-Counter by Gruppe

USE tempdb 
GO 
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'dbo.Emp') AND type in (N'U')) 
DROP TABLE Emp 
GO 
CREATE TABLE Emp(
EmpID Int Identity(10,1) Primary Key, 
EmpGroupID Int) 
GO 
INSERT INTO Emp(EmpGroupID) VALUES(1000) 
INSERT INTO Emp(EmpGroupID) VALUES(1000) 
INSERT INTO Emp(EmpGroupID) VALUES(1000) 
INSERT INTO Emp(EmpGroupID) VALUES(2000) 
INSERT INTO Emp(EmpGroupID) VALUES(2000) 
INSERT INTO Emp(EmpGroupID) VALUES(2000) 
INSERT INTO Emp(EmpGroupID) VALUES(3000) 
GO 
SELECT * FROM Emp 
ORDER BY EmpGroupID,EmpID 

Was ich brauche für jede Gruppe ist eine Zählervariable haben, um 1 erhöht wird, so dass alle Zeilen für Gruppe 1000 haben Zähler = 1, Groupid = 2000 hat Zähler = 2, Groupid = 3000 hat Zähler = 3.

SELECT ?,EmpID,EmpGroupID 
FROM Emp 
ORDER BY EmpGroupID,EmpID 
-- The result I'm looking for is: 
1,10,1000 
1,11,1000 
1,12,1000 
2,13,2000 
2,14,2000 
2,15,2000 
3,16,3000 
+0

Fügen Sie einen aussagekräftigeren Titel hinzu und klären Sie Ihre Frage. Was funktioniert nicht wie erwartet? –

+0

Ja, genau was versuchst du zu tun? – Malfist

+0

Die Änderungen haben wirklich geholfen. Vielen Dank. –

Antwort

4

Sie beschreiben ein dichtes Ranking von Gruppen:

SELECT 
    DENSE_RANK() OVER (ORDER BY EmpGroupID) as Counter, 
    EmpID, 
    EmpGroupID 
FROM Emp 
ORDER BY EmpGroupID,EmpID 

Und hier einige Referenzmaterial: http://msdn.microsoft.com/en-us/library/ms189798.aspx

+0

Nun, ich habe etwas Neues gelernt. Hier war ich und versuchte, etwas mit Zahlentabellen zu hacken ... –

3

ORDER BY

mehr als eine Klausel haben

Versuchen

SELECT Counter,EmpGroupID, EmpID 
ORDER BY Counter,EmpGroupID, EmpID 
+0

Wenn Sie es wollen, Counter -> EmpGroupID -> EmpID, wenn Sie es wollen in Counter -> EmpID -> EmpGroupID nur die letzten zwei Werte tauschen. – Malfist

1

aus Ihrer Beschreibung Erraten, wollen Sie so etwas wie

SELECT EmpGroupID, EmpID, COUNT (1) AS-Zähler
FROM Some-Tabellenname
GROUP BY EmpGroupID, EmpID
ORDER BY COUNT (1), EmpGroupID, EmpID

die für SQL Server ist - in anderen Fällen können Sie möglicherweise

ORDER BY Zähler, EmpGroupID, EmpID

+0

Ich entschuldige mich, dass ich nicht klar gemacht habe, dass Counter nicht in der Tabelle war. –

+0

Was genau zählen Sie? Bitte aktualisieren Sie Ihre Frage, damit wir Ihnen helfen können, eine Antwort zu finden. – Malfist

4

Sie meinen, Sie brauchen eine Abfrage, die Textausgabe mit den Kommas wie gezeigt erzeugt?

Versuchen:

SELECT Counter + ',' + EmpGroupID + ',' + EmpID 
FROM Table 
ORDER BY EmpGroupID 
1

Ich brauchte eine Weile, um zu verstehen, was Sie fragen. Wie ich es verstehe, möchten Sie die Spalte "Counter" basierend auf der EmpGroupID erstellen und auffüllen? Wenn ja, dann etwa so aus:

SELECT EmpGroupID, EmpID, 
    (SELECT COUNT(*) +1 
    FROM [table] 
    WHERE t2.EmpGroupID < t1.EmpGroupID GROUP BY t2.EmpGroupID 
    ) AS Counter 
FROM [table] t1 
ORDER BY EmpGroupID, EmpID 
1

Try this:

SELECT DENSE_RANK() OVER (ORDER BY EmpID) as 'counter',GroupID 
FROM Emp 
ORDER BY counter, EmpGroupID 
+0

SELECT DENSE_RANK() ÜBER (ORDER BY EmpGroupID) als 'Zähler', EmpGroupID FROM Emp ORDER BY Zähler, EmpGroupID –

Verwandte Themen