识别SQL查询中的重复字段

Joe*_*son 8 sql sql-server-2012

我有一个SQL查询返回如下列:

foo
-----------
1200
1200
1201
1200
1200
1202
1202
1202
Run Code Online (Sandbox Code Playgroud)

它已经以特定的方式排序,我想对此结果集执行另一个查询,以便对重复的数据进行ID,如下所示:

foo    ID
----   ----
1200   1
1200   1
1201   2
1200   3
1200   3
1202   4
1202   4
1202   4
Run Code Online (Sandbox Code Playgroud)

重要的是,第二组1200被识别为与第一组分开.OVER/PARTITION的每个变体似乎都希望将两个组合在一起.有没有办法将分区窗口仅限于这些重复的组?

编辑:这适用于Microsoft SQL Server 2012

XN1*_*N16 0

这是我的解决方案,使用游标和临时表来保存结果。

DECLARE @foo INT
DECLARE @previousfoo INT = -1
DECLARE @id INT = 0
DECLARE @getid CURSOR

DECLARE @resultstable TABLE 
(
    primaryId INT IDENTITY(1, 1) NOT NULL PRIMARY KEY,
    foo INT,    
    id int null 
)

SET @getid = CURSOR FOR
SELECT originaltable.foo
FROM   originaltable

OPEN @getid
FETCH NEXT
FROM @getid INTO @foo
WHILE @@FETCH_STATUS = 0
BEGIN
    IF (@foo <> @previousfoo)
    BEGIN
        SET @id = @id + 1
    END

    INSERT INTO @resultstable VALUES (@foo, @id)
    SET @previousfoo = @foo

    FETCH NEXT
    FROM @getid INTO @foo
END

CLOSE @getid
DEALLOCATE @getid
Run Code Online (Sandbox Code Playgroud)