我有一张包含以下内容的表格: 客户ID,MDN,计划,StartDate,EndDate,期限,期限,SMS使用,语音使用
可能会有客户ID出现一次或多次的记录 -
如果该客户ID只有一个实例,我希望术语计数为1 -
如果客户ID出现多次,我想按开始日期订购所有记录 - 并按开始日期排序每个记录的期限 -
如果客户ID为34,并且开始日期为2012年1月1日和2012年2月2日
第一个应该设置为1,第二个应该设置为2 -
SAS
答案 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;