2009-07-22 10 views
0

저는 테이블이 tblEmployeeNominees인데,이 테이블은 피고용인 후보자로 구성되며 피고용인의 피정자 번호를 표시하려고합니다. 직원이 두 명의 후보자가있는 경우 해당 직원의 일련 번호를 1,으로 표시해야합니다. 2 개 이상인 경우 1,2,3, .........을 표시해야합니다.일련 번호 생성

답변

1
SELECT *, ROW_NUMBER() OVER (PARTITION BY Employee ORDER BY Nominee) 
FROM tblEmployeeNominees; 
1

이것 좀보세요. SQL Server 2005에 대한 작업

DECLARE @Table TABLE(
     EmpID INT, 
     NomineeID INT 
) 

INSERT INTO @Table (EmpID,NomineeID) SELECT 1, 1 
INSERT INTO @Table (EmpID,NomineeID) SELECT 1, 2 
INSERT INTO @Table (EmpID,NomineeID) SELECT 2, 1 
INSERT INTO @Table (EmpID,NomineeID) SELECT 3, 1 
INSERT INTO @Table (EmpID,NomineeID) SELECT 3, 2 
INSERT INTO @Table (EmpID,NomineeID) SELECT 3, 3 

;WITH Serials AS (
    SELECT EmpID, 
      MIN(NomineeID) MinNomineeID, 
      CAST(MIN(NomineeID) AS VARCHAR(MAX)) Serial 
    FROM @Table 
    GROUP BY EmpID 
    UNION ALL 
    SELECT t.EmpID, 
      t.NomineeID, 
      s.Serial + ',' + CAST(NomineeID AS VARCHAR(MAX)) Serial 
    FROM @Table t INNER JOIN 
      Serials s ON t.EmpID = s.EmpID 
         AND t.NomineeID > s.MinNomineeID 
) 
SELECT Serials.EmpID, 
     Serials.Serial 
FROM Serials INNER JOIN 
     (
      SELECT EmpID, 
        MAX(LEN(Serial)) LenSerial 
      FROM Serials 
      GROUP BY EmpID 
     ) Lens ON Serials.EmpID = Lens.EmpID 
WHERE LEN(Serials.Serial) = Lens.LenSerial 
ORDER BY 1 
OPTION (MAXRECURSION 0)