根据记录数量和日期添加术语计数



我有一个包含以下内容的表:客户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;

最新更新