我正在尝试生成下表中类似的结果集。但是,无法实现目标。我想分配表中的每一行,如我想要的那样'下表中的列。 以下SQL生成' RowNbr'柱。任何建议将不胜感激。谢谢
SELECT Date, Nbr, status, ROW_NUMBER () over (partition by Date,staus order by date asc) as RowNbr
谢谢
答案 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
;我做了一些诚实的尝试,但无法到达任何最终不会比上述更复杂的地方。