2013-07-11 2 views
0

이것은 정말 저를 곤란하게합니다. 그러나 아마도 그 대답은 단순한 시야에 숨어있을 것이고 나는 성가신 놈을 볼 수 없습니다. 하지만 다시 DBA가 아니며 수천 개의 레코드를 가져 오는 대신 몇 개월 동안 레코드를 롤백하는보다 복잡한 SQL을 작성하는 방법을 배우려고합니다. 그런 식으로 백엔드에서 해당 데이터를 집계하여 클라이언트 측의로드를 줄일 수 있습니다.데이터를 1 년에 1 개월 씩 올리기

데이터베이스에서 몇 년 동안 데이터를 선택하고 매월 별도의 테이블 내에서 자체 레코드로 롤업하려고합니다. 그건 내가 12 개월 동안 12 가지 기록을 지니고 있어야한다는 것을 의미합니다.

내 생각에 단순 해 보입니다. 날짜 범위를 선택하고 DATEPART (MM,)을 사용하는 달로 계산합니다. 그런 다음 간단한 COUNT(), AVG() 및 ETC 함수를 사용하여 해당 데이터를 case 문 외부의 달로 롤업합니다.

그러나 그렇게 잘 작동하지 않습니다. 그렇다면 데이터 범위를 선택하고 한 달에 여러 열을 하나의 레코드로 집계하고 하나의 select 문에서 수년간의 데이터를 검토하는 방법은 무엇입니까? 한 달을 쉽게 요약 할 수있는 하나의 선택 진술을 통해이 작업을 수행 할 수 있습니다.

이 코드

예는 내가 원하는 모든 것을 않습니다. 이 일을 해마다 매월 똑같이 할 수있게 해줘야합니다. * 적용하고자하는 기간.

DECLARE @StartDate Date='2013-01-01' 
DECLARE @EndDate Date='2013-02-01' 

SELECT @Name, 
    @StartDate, 
    COUNT(a.[CODE]), 
    SUM(a.[TICKETS]), 
    AVG(a.[TICKETS]), 
    COUNT(CASE WHEN a.[FLAG1] = 'A' THEN 1 ELSE NULL END), 
    COUNT(CASE WHEN a.[FLAG1] = 'B' THEN 1 ELSE NULL END), 
    COUNT(CASE WHEN a.[FLAG1] IS NULL THEN 1 ELSE NULL END) 
FROM [SOMETABLE] a 
WHERE a.[CODE] = @Name 
AND a.[DATE] >= @StartDate 
AND a.[DATE] < @EndDate 

답변

0

와 유사; 매월 첫 번째 날짜 사용 요구 사항을 반영하여 수정 :

DECLARE @StartDate Date='2013-01-01' 
DECLARE @EndDate Date='2013-02-01' 

SELECT @Name, 
    DATEADD(month, DATEDIFF(MONTH, 0, a.[date]),0), 
    COUNT(a.[CODE]), 
    SUM(a.[TICKETS]), 
    AVG(a.[TICKETS]), 
    COUNT(CASE WHEN a.[FLAG1] = 'A' THEN 1 ELSE NULL END), 
    COUNT(CASE WHEN a.[FLAG1] = 'B' THEN 1 ELSE NULL END), 
    COUNT(CASE WHEN a.[FLAG1] IS NULL THEN 1 ELSE NULL END) 
FROM [SOMETABLE] a 
WHERE a.[CODE] = @Name 
AND a.[DATE] >= @StartDate 
AND a.[DATE] < @EndDate 
GROUP BY DATEADD(month, DATEDIFF(MONTH, 0, a.[date]),0) 
+0

고마워요! 그건 꽤 잘됐다. 나는 모든 레코드에 '2013-01-01'을 넣지 않고 그 달의 첫날을 가져 오는 @StartDate를 수정해야합니다. 나는 그것을 처리 할 수있다. 다시 GROUP BY를 지적 해 주셔서 감사합니다. – Fastidious

+0

방금 ​​편집했습니다. 도움이된다면 정답으로 표시하십시오. –

+0

끝까지 잘 어울립니다. 이제는 이러한 기능이 이러한 방식으로 작동하는 방식을 이해하려고 노력하고 있습니다. DATEPART로 달과 연도를 선택하는 다른 방법은 제게는 꽤 이해할 만했습니다. 그러나 추가 도움을 주셔서 감사합니다. 이제 데이터를 가지고 놀고 싶습니다. – Fastidious

관련 문제