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

时间:2012-02-28 17:21:37

标签: sql sql-server sql-server-2008

我有一张包含以下内容的表格: 客户ID,MDN,计划,StartDate,EndDate,期限,期限,SMS使用,语音使用

可能会有客户ID出现一次或多次的记录 -

如果该客户ID只有一个实例,我希望术语计数为1 -

如果客户ID出现多次,我想按开始日期订购所有记录 - 并按开始日期排序每个记录的期限 -

如果客户ID为34,并且开始日期为2012年1月1日和2012年2月2日

第一个应该设置为1,第二个应该设置为2 -

SAS

1 个答案:

答案 0 :(得分:3)

由于我们现在知道这是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;

编辑根据有关转变要求的新信息添加更新查询。

;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查询创建一个视图,而不是尝试存储数据。


在此处留下2000个解决方法,以防其他用户遇到同样的问题,并且由于某种原因仍在运行SQL Server 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;