我有一个包含以下内容的表:客户ID、MDN、计划、开始日期、结束日期、期限、期限计数、短信使用、语音使用
可能会有客户id显示一次或多次的记录-
如果该客户ID只有一个实例,我希望期限计数为1-
如果客户id显示不止一次,我想按开始日期订购所有记录,并按开始日期增加每个记录的期限计数-
如果客户id为34,并且开始日期为2012年1月1日和2012年2月2日
第一个应该设置为1,第二个应该设置成2-
Sas
由于我们现在知道这是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;
EDIT根据有关换档要求的新信息添加更新查询。
;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;