2

シナリオを作成するために私が書いたコードは次のとおりです。

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

私が必要とするのは、グループ 1000 のすべての行がカウンター = 1、groupid = 2000 がカウンター = 2、groupid = 3000 がカウンター = 3 を持つように、各グループにカウンター変数があり、1 ずつインクリメントすることです。

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
4

6 に答える 6

5

グループの密なランキングを説明しています:

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

そして、ここにいくつかの参考資料があります: http://msdn.microsoft.com/en-us/library/ms189798.aspx

于 2009-06-01T20:12:16.297 に答える
4

つまり、次のようにコンマを含むテキスト出力を生成するクエリが必要ですか?

試す:

SELECT Counter + ',' + EmpGroupID + ',' + EmpID
FROM Table
ORDER BY EmpGroupID
于 2009-06-01T19:27:55.950 に答える
3

ORDER BY には複数の句を指定できます

試す

SELECT Counter,EmpGroupID, EmpID
ORDER BY Counter,EmpGroupID, EmpID
于 2009-06-01T19:26:27.730 に答える
1

あなたが何を求めているのか理解するのに少し時間がかかりました。私が理解しているように、EmpGroupIDに基づいて「Counter」列を作成してデータを設定しますか?もしそうなら、このようなもの:

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
于 2009-06-01T19:30:12.280 に答える
1

あなたの説明から推測すると、次のようなものが必要ですか

SELECT EmpGroupID, EmpID, COUNT(1) AS Counter
FROM some-table-name
GROUP BY EmpGroupID, EmpID
ORDER BY COUNT(1), EmpGroupID, EmpID

それはSQL Serverの場合です-他の場合では、あなたが言うことができるかもしれません

ORDER BY カウンター、EmpGroupID、EmpID

于 2009-06-01T19:27:47.433 に答える
1

これを試して:

SELECT DENSE_RANK() OVER (ORDER BY EmpID) as 'counter',GroupID 
FROM Emp
ORDER BY counter, EmpGroupID
于 2009-08-14T14:34:06.470 に答える