sql - 防止基于序号位置删除 SQL 查询中的行

标签 sql sql-server

所以我有一个看起来像这样的行集合:

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/

相关文章:

java - 列计数与 java 和 mysql 数据库中第 1 行的值计数不匹配

sql - MS SQL 如何从表中选择 n 行,即使表有 n - x 行

SQL Server DDL 脚本为数据库中的每个表追加(或删除)同一组列?

sql - SQL 中的多个 XML 标记

mysql - 存储过程不运行

c# - 应用程序电子邮件架构

php - 在虚拟名册上对用户进行分组

javascript - 检查商店是否营业。 MySQL Node.js 业务逻辑

c# - 尝试使用 LINQ 以数据库字段作为参数获取不同的值

sql - 为执行计数和运行时间分析 SQL 存储过程的步骤是什么