2012-10-28 1 views
0

고객 (헬스 클럽)이있는 SQL Server (2000) 데이터베이스가 있습니다.T-SQL 계산 백분율

고객은 매년 가입합니다. 회원 가입을 갱신 한 고객의 비율 (시간 경과 및 과거 연도)을 계산할 수 있기를 원합니다. 활성 상태 필드는 여전히 회원인지 여부를 나타냅니다.
JoinDate가 변경되지 않습니다. 회원이 갱신 할 때 ActiveDate와 DueDate (고객이 갱신 할 예정인 경우) 인 경우 DueDate는 Active Date보다 1 년 앞서 있습니다. 제가하고자하는 것은 가능하다면 또는 전체적으로 지난 수년간에 걸쳐 세분화 된 고객의 백분율에 대한 이해를 시도하는 것입니다. 어떤 아이디어. 감사. 고객 테이블에있는 필드가 포함되어

CustomerID JOIN Date Cancel Date ActiveStatus ActiveDate DueDate 

    12345  10/01/2011 NULL   Yes   10/01/2012 10/01/2013 

    12346  1/1/2010  12/31/2011 No   1/1/2010  1/1/2011 

답변

0

좋아, ActiveDate이 Join_Date 후 경우에 우리가 알고있는 고객은 회원 자격을 갱신. 우리가 얻을 필요가 mebership을 갱신 고객의 비율을 얻으려면 : 고객의

수있는 사람이 ActiveDate> JOIN_Date (회원 자격을 갱신 고객) 회원이에 거는 갱신 고객의

수 100

당신은이 같은 고객 당 갱신의 수를 계산할 수 있습니다

select 
(select COUNT(*) from Customer where ActiveDate > JOIN_Date) * 100/COUNT(*) 
from Customer 
+0

답장을 보내 주셔서 감사합니다. 나는 그것이 속도가 될지 확신하지 못한다. 누군가 ActiveDate가 몇 년 후에 거기서 버려도 JoinDate보다 클 것이기 때문이다. – steve

+0

나는 귀하의 질문에, 그것은 괜찮아요 - 단지 0 %의 갱신을 반환, 왜 확실하지 실행합니다. – steve

+0

안녕하세요, 저는 고객의 데이터가있는 테이블 고객을 내 컴퓨터에서 질문합니다 (두 줄). 쿼리를 실행하면 결과가 50이됩니다. 왜 0인지 알 수 없습니다. – Markweb

0

모든 고객의 합이 번호로이 결과 분할 ..

select 
    *, 
    datediff(yyyy, joindate, 
     case activestatus when 'yes' then getdate() else CancelDate end 
    ) 
from yourtable 
+0

감사합니다 podiluska. 이 쿼리에서 구문 오류가 발생합니다. 메시지 1023, 수준 15, 상태 1, 줄 5 datediff에 대해 지정된 매개 변수 1이 잘못되었습니다. – steve