Sql 秩重复数据集

Sql 秩重复数据集,sql,sql-server,tsql,Sql,Sql Server,Tsql,假设我有像A列和B列那样的数据,我如何像C列那样对它们进行排序?我尝试了多种不同的RANK和NTILE,但都没有成功。多谢各位 注意:每组并不总是有3行,它是不同的 SQL表本身就是无序的。第1行和第4行之间没有区别,数据如您所示。您可以生成等效的结果集,但顺序可能不同 简单的算术可以做到这一点: select a, ( row_number() over (order by a) + 2) / 3 ) as from t order by a, b, c; 更好的方法是使

假设我有像A列和B列那样的数据,我如何像C列那样对它们进行排序?我尝试了多种不同的
RANK
NTILE
,但都没有成功。多谢各位


注意:每组并不总是有3行,它是不同的

SQL表本身就是无序的。第1行和第4行之间没有区别,数据如您所示。您可以生成等效的结果集,但顺序可能不同

简单的算术可以做到这一点:

select a, 
       ( row_number() over (order by a) + 2) / 3 ) as 
from t
order by a, b, c;
更好的方法是使用
b
列:

select a,
       row_number() over (partition by b order by a) as c
from t
order by a, c;

您可以按如下方式使用ntile:

Select *, ntile(2) over(order by (Select NULL)) from #data

您可以根据您的数据提供任何其他有效的订购列,而不是(选择NULL)

。我应该提到的是,休息时间并不总是在3点。对此很抱歉。另外,尝试了第二种方法,它将所有内容都列为1,因为b列中的数字一直在变化。@ASQLDBA。在您的示例中,数字重复。如果您有不同的问题,您应该将其作为不同的问题提问,并在问题中提供适当的样本数据和期望的结果。您是否对我的示例没有显示不同数量的行以及我忘记提到存在这样的场景感到不安?示例数据和期望的结果都很好。Gordon所说的@ASQLDBA是,您需要提供一个完整的、可验证的示例。如果您阅读了有关堆栈溢出的帮助页面,特别是关于如何提出一个好问题的部分,您就会理解这一点。你读了它也会得到一个徽章!非常感谢你,坎南。我得到了一个错误,因为我必须有多个列而不是NULL,并且SQLServer会抛出一个错误。我要做的是在作业服务器上运行一个查询,其中列出作业id、步骤id和运行日期(使用代理的日期时间函数)。然后,我想对作业的每次运行进行分组,因此,如果我的作业每小时运行一次,第一次运行时,所有步骤的排名应该为1,第二次运行的排名应该为2,依此类推。