嘗試此
DECLARE @Tbl TABLE(code VARCHAR(5), descd VARCHAR(5), slnum int)
INSERT INTO @Tbl
(code, descd)
VALUES
('10', 'a'),
('10', 'b'),
('12', 'c'),
('12', 'd'),
('11', 'e'),
('12', 'f')
DECLARE @TempTable TABLE(code VARCHAR(5), descd VARCHAR(5), RowId int)
DECLARE @RowId INT = 1
WHILE @RowId <= (SELECT COUNT(*) FROM @Tbl)
BEGIN
INSERT INTO @TempTable
SELECT TOP 1
T.code ,
T.descd ,
@RowId
FROM
@Tbl T LEFT JOIN
@TempTable L ON L.code = T.code AND L.descd = T.descd
WHERE
L.code IS null
ORDER BY
T.code,
T.descd
UPDATE @Tbl
SET slnum = (SELECT COUNT(1) FROM @TempTable A WHERE [@Tbl].Code = A.Code)
WHERE
[@Tbl].Code = (SELECT TOP 1 Y.code FROM @TempTable Y WHERE RowId = @RowId) AND
[@Tbl].descd = (SELECT TOP 1 Y.descd FROM @TempTable Y WHERE RowId = @RowId)
SET @RowId += 1
END
SELECT * from @Tbl
結果:
code descd slnum
10 a 1
10 b 2
12 c 1
12 d 2
11 e 1
12 f 3
添加DBMS標籤 – Jens
1.爲什麼不使用'ROW_NUMBER()',它是一個功課? 2.如果else是一個不是'loop'的條件。 3你想用'While'循環或'Cursor'來獲得答案嗎? (表現不佳) –