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
这是我的解决方案,使用游标和临时表来保存结果。
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)
| 归档时间: |
|
| 查看次数: |
158 次 |
| 最近记录: |