우리가 지금 알고 있기 때문에이 SQL 서버 2008입니다하지 SQL 서버 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 - @Sarfaraz가 왜 당신은 SQL 서버 2000로 태그 된 혼란 –
죄송합니다? 이제는 SQL Server 2000에 있다고 말했기 때문에 추가 작업이 수행 된 두 가지 질문이 있습니다. –
나는 더 자세히 살펴야합니다. 나는 SQL Server 2008을 두 번 선택했다고 생각했습니다! - –