我正在处理SQL Server 2005的一个查询,该查询需要返回带有两个"索引"字段的数据.第一个索引"t_index"应在"shade"列每次更改时递增,而第二个索引在"shade"列中的值分区内递增:

t_index s_index shade
1       1       A
1       2       A
1       3       A
1       4       A
1       5       A
2       1       B
2       2       B
2       3       B
2       4       B
2       5       B

要获取s_索引列,我使用以下方法:

Select ROW_NUMBER() OVER(PARTITION BY [shade] ORDER BY [shade]) as s_index

我的问题是,当"shade"列中的值发生变化时,如何使第一个索引仅递增?

推荐答案

这可以通过DENSE_RANK()功能实现:

  DENSE_RANK() OVER(Order By [shade]) as t_index

Sql相关问答推荐

SQL计数所有值在联接范围内的行

为什么Postgrs Planner会在输出部分中显示我在查询中不使用的列?'""

查询多个表并返回合并在联合列上的所有表中的所有行

从列的不同值创建列

如何根据特定的内部json元素值过滤postgres查询结果?

仅 for each 唯一ID返回一个元素,并仅返回最新连接的记录

如何在SQL中更新Json字符串

是否可以为表中的所有列生成散列值?

如何从查询中的三个或更多个表中添加另一个相同的列?

如何用QuestDB生成蜡烛图?

此过程如何在不引用传递的参数值的情况下执行工作?

使用CTE在SNOWFLAKE中创建临时表

如何修复初学者 SQL INNER JOIN 查询错误

对现有记录进行分组

SQL 搜索 - 获取最大值日期的奇怪行为

如何使用 Google BigQuery 中的条件根据特定列值连接列的 N 行?

在presto sql中解析带有区域的时间格式

忽略与给定列匹配的行的 LAG 函数

在 postgresql 中,我可以将其组合成一个查询吗?

面对来自以下两个代码的不同输出