2009-07-22 2 views
0

У меня есть таблица под названием tblEmployeeNominees, эта таблица состоит из номинального члена сотрудника, у которого у нас может быть более одного кандидата на сотрудника, я хочу отображать номера в номере для кандидатов для кандидата. , если у сотрудника есть два кандидата, тогда ему необходимо будет показать серийный номер для этого сотрудника как 1,2 , если более 2 или более, то он должен показать 1,2,3, ..........Генерирование серийных номеров

ответ

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

Посмотрите на это. Работы для сервера sql 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) 
Смежные вопросы