如何在SQL Server 2012中使用Row_Number()函数?

时间:2014-01-28 18:18:05

标签: tsql sql-server-2012

我正在尝试生成下表中类似的结果集。但是,无法实现目标。我想分配表中的每一行,如我想要的那样'下表中的列。 以下SQL生成' RowNbr'柱。任何建议将不胜感激。谢谢

SELECT Date, Nbr, status, ROW_NUMBER () over (partition by Date,staus  order by date asc) as RowNbr

enter image description here

谢谢

1 个答案:

答案 0 :(得分:2)

如果您将来要搜索类似的解决方案,这是一个典型的“差距和孤岛”问题。基本上,您希望计数器在每次达到给定Nbr的新状态时重置,按日期排序。

我相信Itzik Ben-Gan开发了这种通用的整体技术,他有很多关于它的文章和书籍章节。

;WITH cte AS
(
  SELECT [Date], Nbr, [Status], 
    rn = ROW_NUMBER() OVER (PARTITION BY Nbr ORDER BY [Date]) 
       - ROW_NUMBER() OVER (PARTITION BY Nbr,[Status] ORDER BY [Date])
    FROM dbo.your_table_name
)
SELECT [Date], Nbr, [Status], 
  [I want] = ROW_NUMBER() OVER (PARTITION BY Nbr,rn ORDER BY [Date]) 
FROM cte
ORDER BY Nbr, [Date];

2012年,you may be able to achieve something similar using LAG and LEAD;我做了一些诚实的尝试,但无法到达任何最终不会比上述更复杂的地方。