0
私はtblEmployeeNomineesというテーブルを持っています。このテーブルは、従業員の複数の候補者を持つことができる従業員の候補メンバーから成っています。従業員の候補メンバーのセール・ナンバーを表示します。 従業員に2人の候補者がいる場合、その従業員のシリアル番号を1,2 として表示する必要があります.2以上の場合は1,2,3、.........を表示する必要があります。シリアル番号の生成
私はtblEmployeeNomineesというテーブルを持っています。このテーブルは、従業員の複数の候補者を持つことができる従業員の候補メンバーから成っています。従業員の候補メンバーのセール・ナンバーを表示します。 従業員に2人の候補者がいる場合、その従業員のシリアル番号を1,2 として表示する必要があります.2以上の場合は1,2,3、.........を表示する必要があります。シリアル番号の生成
SELECT *, ROW_NUMBER() OVER (PARTITION BY Employee ORDER BY Nominee)
FROM tblEmployeeNominees;
これをご覧ください。 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)