TSQL澄清

时间:2015-02-03 18:43:27

标签: sql tsql select stored-procedures

我在select语句中有以下行:

cast (row_number( ) OVER ( ORDER BY cs.OrgId ) AS int) AS rowId 

有人可以确认我是否理解这一点吗?

按Org Id排序并创建一个新列rowId作为int,其中包含订单中orgid位置的值?

这听起来不错吗?

1 个答案:

答案 0 :(得分:2)

不,这不完全是你所说的。函数row_number() OVER (ORDER BY [order])返回一个值,该值表示如果按指定顺序排序行将占用的位置。

这种细微差别意味着几件事:

  • 您可以使用不同的订单(和排名函数)获得不同的行号(或其他排名)
  • 您可以按照与row_number()函数
  • 不同的任何其他条件订购最终结果集
  • 您可以使用row_number()(或任何其他窗口函数)的结果来过滤,分组或以任何方式使用它

cast部分仅从BIGINT转换为INT

“创建新列”取决于您使用窗口函数的位置。例如,您可以在where子句中使用它,在这种情况下,它根本不会创建新列。

您可以阅读有完整说明的documentation on OVER clause和几个示例。另请参阅ranking functions docs