sql - 我可以使用 RowNumber 对我的结果集进行分类吗?
问题描述
我有以下结果集:
ItemNumber | Item
1 | a
2 | b
1 | c
2 | d
3 | e
1 | f
2 | g
我想对这些进行分类,以便结果集如下所示:
ItemNumber | Item
1 | a
1 | b
2 | c
2 | d
2 | e
3 | f
3 | g
这就是我想说的,a
并且b
是链接的,因此按相同的 RowNumber 分类。
我正在努力使用 RowNumber Over Partition By... 让它工作
关于如何解决这个问题的任何建议?
我已经尝试过分区上的行号。这并没有给出我想要的结果:
SELECT ROW_NUMBER() OVER (PARTITION BY ItemNumber ORDER BY (SELECT NULL)) AS RowNumber,
ItemNumber,
Item
FROM #List;
解决方案
这将为您提供您所追求的结果,但是,如果我们所拥有的过于简化,我怀疑它是否会在您的生产环境中工作。如果 的值Item
在您的数据库中实际上是按字母顺序排列的,那么这将起作用。ORDER BY
如果没有,您要求的任务是不可能的,因为无法使用子句按照原始数据的顺序对行进行排序。
无论如何,需要注意的是,有条件的COUNT
作品:
SELECT COUNT(CASE V.ItemNumber WHEN 1 THEN 1 END) OVER (ORDER BY V.Item ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS ItemNumber,
V.Item
FROM (VALUES(1,'a'),
(2,'b'),
(1,'c'),
(2,'d'),
(3,'e'),
(1,'f'),
(2,'g'))V(ItemNumber,Item);
您也可以实现上述目标ROW_NUMBER
,但COUNT
在我看来,a 是“更简单”的选项。
编辑:似乎没有使用 SQL Server 2012,正在使用不受支持的 SQL Server 版本。因此,此答案将不起作用;因为您需要支持的版本(2012+)才能使用ROWS BETWEEN
. 无论如何我都会把它留在这里,以防在不久的将来升级 OP,这是强烈建议的。
推荐阅读
- google-cloud-platform - 使用 gcsfuse 从 Cloud Storage Bucket 读取/写入数据
- r - 使用观星器使列更宽?
- javascript - 使用json和Vue js单击按钮时按数据字段过滤数据
- javascript - 每个 API 的 Angular http 拦截器
- reactjs - 尝试导入错误:“makeObservable”未从“mobx”导出
- macos - 复制 SF Symbols 应用符号名称的简单方法?
- javascript - 当输入字段的值发生更改时更改背景颜色?
- python - 我的 Django 应用程序不再在我的本地计算机上运行因为我更改为 Heroku postgrel 数据库
- python - Python Flask 更改密码登录表单
- php - 数据表上href的甜蜜警报