2009-07-22 27 views
0

私はtblEmployeeNomineesというテーブルを持っています。このテーブルは、従業員の複数の候補者を持つことができる従業員の候補メンバーから成っています。従業員の候補メンバーのセール・ナンバーを表示します。 従業員に2人の候補者がいる場合、その従業員のシリアル番号を1,2 として表示する必要があります.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) 
関連する問題