저는 항상 가장 성능이 좋은 SQL 쿼리를 작성하려고 노력하고 있지만, 그러한 쿼리를 실행하는 데 필요한 최초의 사람이 아니어야한다고 생각하는 보고서 요청을 몇 번이고 반복합니다. 찾고있는 데이터 세트를 생성하는 더 좋은 방법이있을 것입니다.SQL 쿼리 요약 -
이 데이터의 테이블을 고려 SQL 서버 2012
에 관한,이 시나리오에서 판매를
라고 판매는 시작 날짜와 종료 날짜가 있습니다. 고객이 아직 서비스를 받고 있기 때문에 종료일이 null 일 수 있습니다 (예 : 구독 기반 제품/서비스). 위의 데이터에서 3 명의 고객이 서비스를 중지했으며 5 명은 여전히 서비스를 받고 있음을 알 수 있습니다.최고의 쿼리 (들)이 이런 식으로 아래의 설정을 작성하는 것이 무엇 :
* 분명히 데이터 세트는 다르지만, 예를 들어이 두 번째 이미지입니다.
결과의 "활성"상태는 고객의 StartDate가 월 열 앞에 있고 고객의 종료일이 null이거나 월 열 뒤에있는 경우입니다.
-이 작업은 엄청난 양의 인라인 셀렉션으로 수행 할 수 있습니다. - 아마도 T-SQL의 PIVOT으로이 작업을 수행 할 수 있지만 위의 StartDate/EndDate 로직을 포함 할 수 있는지, 가능한 경우 (가능한 경우) 및 가능한 경우 수행 가능한지 여부는 확실하지 않습니다.
생각? 아이디어? 예? 감사합니다.
먼저 표시하고자하는 달이 필요합니다. 이것을 위해 values 절을 사용할 수 있습니다. 그런 다음 한 달에 적용되는 레코드를 얻을 수 있도록 테이블에 가입하십시오. 그런 다음 부서 및 월별 집계/피벗. (종종 피벗 작업은 SQL : SQL이 아닌 응용 프로그램에서 수행되므로 데이터를 가져오고 응용 프로그램은 프레젠테이션을 신경 써야합니다.) –