首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在tsql中生成连续的行号?

如何在tsql中生成连续的行号?
EN

Stack Overflow用户
提问于 2014-10-02 20:37:48
回答 2查看 34.2K关注 0票数 10

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

代码语言:javascript
复制
RowNumber - 1, Otherdata - Something1
RowNumber - 2, Otherdata - Something2
RowNumber - 3, Otherdata - Something3
RowNumber - 4, Otherdata - Something4
RowNumber - 5, Otherdata - Something5
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-11-26 21:35:51

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

代码语言:javascript
复制
    SELECT
        ROW_NUMBER() OVER (ORDER BY [<PRIMARYKEY_COLUMN_NAME>]) AS Number
    FROM
        [<TABLE_NAME>]

语法是Func([ arguments ]) OVER (analytic_clause),您需要关注OVER ()。最后一个圆括号对行进行分区,并在这些分区上逐个应用Func()。在上面的代码中,我们只有一个行的集合/分区。因此,生成的序列是针对所有行的。

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

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

票数 16
EN

Stack Overflow用户

发布于 2014-10-02 20:47:21

如果排序列包含唯一值,也可以不使用新的内置Row_Number()函数,而是使用基于排序列的子查询。

代码语言:javascript
复制
  Select [other stuff],
      (Select count(*) From table 
       where sortCol < a.sortCol) rowNum
  From table a
  Order by sortCol

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

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26160970

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档