所以我有一个看起来像这样的行集合:
Text Sequence
ITEM1 1
ITEM1 2
ITEM1 3
ITEM2 4
ITEM2 5
ITEM3 6
ITEM2 7
ITEM2 8
ITEM1 9
ITEM1 10
我希望结果看起来像:
Text Sequence
ITEM1 1
ITEM2 4
ITEM3 6
ITEM2 7
ITEM1 9
因此,我采用行的第一个实例并仅保留第一个序列号,但是如果该项目在列表中进一步重复,我也会保留该实例的序列号。
我的SQL是:
SELECT Text,Seq=Min(Sequence)
FROM Items
GROUP BY Text
ORDER BY Seq
结果是:
Text Sequence
ITEM1 1
ITEM2 4
ITEM3 6
GROUP BY Text 语句正在删除第 4 行和第 5 行。我该如何避免这种情况?
最佳答案
调整脚本以允许序列中存在间隙
DECLARE @t TABLE(Text char(5), Sequence int)
INSERT @t VALUES
('ITEM1',1),('ITEM1',2),('ITEM1',3),('ITEM2',4),('ITEM2',5),
('ITEM3',6),('ITEM2',7),('ITEM2',8),('ITEM1',9),('ITEM1',10)
;WITH x as
(
SELECT Text,Sequence,
row_number() OVER (order by Sequence)
- row_number() OVER (partition by text order by Sequence) grp
FROM @t
)
SELECT text, MIN(Sequence) seq
FROM x
GROUP BY text, grp
ORDER BY seq
结果:
text seq
ITEM1 1
ITEM2 4
ITEM3 6
ITEM2 7
ITEM1 9
关于sql - 防止基于序号位置删除 SQL 查询中的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22861123/