Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在tsql中生成顺序行号?_Sql_Sql Server 2008_Tsql - Fatal编程技术网

如何在tsql中生成顺序行号?

如何在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 -

我在报告中要求在行中显示备用颜色,为此,我需要在SQL Select语句中生成序列号,请参见下面的示例,以便稍后在显示行时使用。 我正在尝试排号和其他一些技术,但它不起作用。这不应该使用脚本来完成,我应该能够在Select语句中生成。谢谢你的帮助

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搜索中它会跳起来。