您好!
我在表格中列出了以下数据的前两列(让我们称之为storico):
IdZona Inizio number
24 1985-03-01 1
81 1988-12-01 2
21 1990-01-01 3
21 1992-02-01 3
79 1996-01-01 4
21 1996-11-01 5
21 1999-02-01 5
21 2005-01-01 5
21 2008-12-01 5
因此必须按日期排序数据(" inizio")。对于每个日期,IdZona都有一定的价值。 我想知道的是如何获得SQL Server 2008 R2计算的第三列。 每次检测到列idZona中的另一个值时,该数字必须增加。当返回已经给出idZona的值时(p.e.se line 1996-11-01),[number]值不得报告已经显示的值,而是增加另一个时间。
希望,任务很明确。
提前致谢,
克劳斯
答案 0 :(得分:2)
这有点令人费解,但递归CTE可以做到这一点。
如果保证日期是唯一的,可以使其更简单。
这也是用光标迭代可能更快更清晰的场合之一。
With x as (
Select Top 1
IdZona,
Inizio,
1 [number]
From
dbo.Storico
Order By
Inizio,
IdZona
Union All
select
y.IdZona,
y.Inizio,
y.[number]
from (
select
s.IdZona,
s.Inizio,
case
when s.IdZona = x.IdZona Then x.[number]
else x.[number] + 1
end [number],
row_number() over (order by s.Inizio, s.IdZona) rn
From
dbo.Storico s,
x
Where
s.Inizio > x.Inizio or (
s.Inizio = x.Inizio and
s.IdZona > x.idZona
)
) y
Where
y.rn = 1
)
Select
*
From
x
<强> Example SQLFiddle 强>