如何在tsql中生成顺序行号?
我在报告中要求在行中显示备用颜色,为此,我需要在SQL Select语句中生成序列号,请参见下面的示例,以便稍后在显示行时使用。 我正在尝试排号和其他一些技术,但它不起作用。这不应该使用脚本来完成,我应该能够在Select语句中生成。谢谢你的帮助如何在tsql中生成顺序行号?,sql,sql-server-2008,tsql,Sql,Sql Server 2008,Tsql,我在报告中要求在行中显示备用颜色,为此,我需要在SQL Select语句中生成序列号,请参见下面的示例,以便稍后在显示行时使用。 我正在尝试排号和其他一些技术,但它不起作用。这不应该使用脚本来完成,我应该能够在Select语句中生成。谢谢你的帮助 RowNumber - 1, Otherdata - Something1 RowNumber - 2, Otherdata - Something2 RowNumber - 3, Otherdata - Something3 RowNumber -
RowNumber - 1, Otherdata - Something1
RowNumber - 2, Otherdata - Something2
RowNumber - 3, Otherdata - Something3
RowNumber - 4, Otherdata - Something4
RowNumber - 5, Otherdata - Something5
如果排序列包含唯一的值,也可以使用基于排序列的子查询,而不使用新的内置行数函数
Select [other stuff],
(Select count(*) From table
where sortCol < a.sortCol) rowNum
From table a
Order by sortCol
更改如果您的数据库支持分析函数,例如ROW\u NUMBER,则无需避免使用这些函数
SELECT
ROW_NUMBER() OVER (ORDER BY [<PRIMARYKEY_COLUMN_NAME>]) AS Number
FROM
[<TABLE_NAME>]
语法是Func[arguments]OVER解析_子句,您需要关注OVER。最后一个括号对行进行分区,并对这些分区逐一应用Func。在上面的代码中,我们只有一个行集/行分区。因此,生成的序列适用于所有行
您可以创建多组数据,并在一次遍历中为每个数据生成序列号。例如,如果需要为具有相同categoryId的所有行集生成序列号。您只需要添加partitionby子句,就像这个partitionbycategoryid orderby[]
请记住,在“从”之后,您还可以使用另一个额外的ORDER BY对数据进行不同的排序。但是它对以上没有影响您试过排号了吗?语法类似于:按值划分的[n]]order\u BY\u子句上的行数。阅读更多@:我试过了,但没有成功,也许我应该再看一眼。你可以发布你试图用行号扩展的查询,这样我们就可以更好地回答你的行号哪里出了问题吗?我使用Alex提供的MSDN示例尝试了行号解决方案,这次工作了。谢谢Alex。使用row_number的可能重复将比相关的标量子查询快得多。实际上,row_number已存在10年,子查询将导致所有字段的顺序处理。这是一个明确的禁忌。如果你不能使用ROW_numer,一个标准的技巧是使用模拟序列。这个技巧在2005年之前就已经被使用了,甚至被载入了甲骨文的双表中??!!您是否真的认为知道如何在各种场景中构造相关子查询不值得了解?不管它在任何特定情况下的实用性或性能问题,这项技术绝对值得了解。简单实用。我需要这个查询没有主键。对于同一查询中的多个用法,值得将其放在交叉应用部分+1中,以抵消那些认为此解决方案存在本质错误的twerps。这是2018年,我有一些学生运行的DBMS软件版本还不支持窗口功能。好的,所以我告诉他们升级,但这并不总是他们可以控制的。我在Microsoft SQL中的测试表明,窗口函数的速度大约是原来的7倍,但是,即使是14秒而不是2秒,这也是一个解决方案。注意:这个线程很旧,但在我的google搜索中它会跳起来。