因为我们现在知道这是SQL Server 2008中,没有SQL Server 2000作为原标签,我们可以这样做:
SELECT CustomerID, StartDate, TermCount = ROW_NUMBER()
OVER (PARTITION BY CustomerID ORDER BY StartDate)
FROM dbo.table
ORDER BY CustomerID, StartDate;
编辑添加upda基于关于换档要求的新信息进行查询。
;WITH t AS
(
SELECT CustomerID, StartDate, CountColumn, TermCount = ROW_NUMBER()
OVER (PARTITION BY CustomerID ORDER BY StartDate)
FROM dbo.table
) UPDATE t SET CountColumn = TermCount;
但是正如我在评论所说,这是不明智的,因为你需要不断更新整个表(或至少为客户整套行)每当任何行对于客户的变化。只需基于上述SELECT
查询创建视图,而不是尝试存储数据。
如果其他用户遇到同样的问题并且由于某种原因仍在运行SQL Server 2000,请在此处留下2000解决方法。如果你的桌子很大,这将会非常缓慢。
SELECT CustomerID, StartDate, TermCount = (
SELECT COUNT(*) FROM dbo.table AS t2
WHERE t.CustomerID = t2.CustomerID
AND t.StartDate <= t2.StartDate
)
FROM dbo.table AS t
ORDER BY CustomerID, StartDate;
即时运行SQL服务器2008年 - 抱歉的混淆 – 2012-02-28 17:44:47
@Sarfaraz为什么你被标记为SQL Server 2000?这是现在的两个问题,因为你说你在SQL Server 2000上执行额外的工作。 – 2012-02-28 17:50:21
我必须仔细观察,我以为我选择了SQL Server 2008两次! - – 2012-02-28 17:57:02