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

时间:2014-10-02 12:37:48

标签: sql sql-server-2008 tsql

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

RowNumber - 1, Otherdata - Something1
RowNumber - 2, Otherdata - Something2
RowNumber - 3, Otherdata - Something3
RowNumber - 4, Otherdata - Something4
RowNumber - 5, Otherdata - Something5

2 个答案:

答案 0 :(得分:10)

如果您的数据库支持分析函数,则无需避免使用分析函数,例如ROW_NUMBER()

    SELECT
        ROW_NUMBER() OVER (ORDER BY [<PRIMARYKEY_COLUMN_NAME>]) AS Number
    FROM
        [<TABLE_NAME>]

语法为Func([ arguments ]) OVER (analytic_clause),您需要关注OVER()。最后一个括号创建行的分区,并逐个在这些分区上应用Func()。在上面的代码中,我们只有一组行/分区。因此,生成的序列适用于所有行。

您可以制作多组数据,并在一次运行中为每个数据生成序列号。例如,如果您需要为具有相同categoryId的所有行集生成序列号。您只需要像Partition By一样添加(PARTITION BY categoryId ORDER BY [<PRIMARYKEY_COLUMN_NAME>])子句。

请记住,在FROM之后,您还可以使用另外一个ORDER BY来对数据进行不同的排序。但它对OVER()

没有影响

答案 1 :(得分:2)

如果sort列包含唯一值,则还可以在没有新的内置Row_Number()函数的情况下使用基于排序列的子查询来执行此操作。

  Select [other stuff],
      (Select count(*) From table 
       where sortCol < a.sortCol) rowNum
  From table a
  Order by sortCol

<更改为<=以从1开始计数而不是0