2012-02-28 4 views
-2

에 따라 기간 카운트를 추가 고객 ID가 한 번 이상 나타 기록 할 수 - 나는 고객 ID가 두 번 이상 나타 경우내가 다음과 같이 테이블이 얼마나 많은 기록과 날짜

- 해당 고객의 ID 하나 개의 인스턴스 만있는 경우

, 난 용어 카운트가 1되고 싶어 시작일까지 모든 레코드를 정렬하고 시작일 순서대로 정렬 된 각 레코드의 용어 수를 증가 시키려면 -

고객 ID는 34이고, 경우에 시작 일자 및 2012 년 1 월 및 제 2012년 2월 2일 하나가 1로 설정되어야

번째 설정해야 2 -

사스

답변

3

우리가 지금 알고 있기 때문에이 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; 
+0

메신저 실행 SQL 서버 2008 - @Sarfaraz가 왜 당신은 SQL 서버 2000로 태그 된 혼란 –

+0

죄송합니다? 이제는 SQL Server 2000에 있다고 말했기 때문에 추가 작업이 수행 된 두 가지 질문이 있습니다. –

+0

나는 더 자세히 살펴야합니다. 나는 SQL Server 2008을 두 번 선택했다고 생각했습니다! - –

관련 문제