2014-06-23 11 views
0

여기에 샘플 data이 있습니다. 그리고 제가 전에 here을 물어 보았습니다.하지만 더 멀리 테스트 한 결과 나는 Year을 계정해야한다는 사실을 잊어 버렸습니다.그룹 별 날짜 범위 (월, 연도)

간단히 말해서 월별 레코드를 그룹화하고자합니다. Aug 내지 Jan (그룹 1) 및 Feb 내지 July (그룹 2)이다. 왜냐하면 나는 매 6 개월마다 얼마나 많은 학교 물건이 만들어 졌는지에 대한 count을 원하기 때문입니다. 지속적인 경향이 구체적이어야합니다. 어떤 도움이 많이 기꺼이 감사하겠습니다

+-----------+-------+---------------+ 
| sc_object | count | range   | 
+-----------+-------+---------------+ 
| pencil | 1  | 2013-8 2014-1 | 
| eraser | 1  | 2014-2 2014-7 | 
| pencil | 1  | 2014-2 2014-7 | 
| sharpener | 1  | 2014-2 2014-7 | 
| pencil | 1  | 2014-8 2015-1 | 
| eraser | 1  | 2015-2 2015-7 | 
| pencil | 1  | 2015-2 2015-7 | 
| sharpener | 1  | 2015-2 2015-7 | 
| eraser | 1  | 2015-8 2016-1 | 
| sharpener | 2  | 2016-2 2016-7 | 
| pencil | 1  | 2016-2 2016-7 | 
| sharpener | 1  | 2016-8 2017-1 | 
| eraser | 1  | 2016-8 2017-1 | 
+-----------+-------+---------------+ 

:

A는 같은 결과 집합. 정말 고맙습니다!

답변

3

당신이 (http://www.sqlfiddle.com/#!3/41ac6/19)과 같은 작업을 수행 할 수 있습니다

WITH cteRanges 
AS 
(
    SELECT 
      site, 
      CASE 
       WHEN MONTH(date) IN (1) THEN CAST(YEAR(date) - 1 AS VARCHAR(4)) + '-8' + ' ' + CAST(YEAR(date) AS VARCHAR(4)) + '-1' 
       WHEN MONTH(date) IN (8, 9, 10, 11, 12) THEN CAST(YEAR(date) AS VARCHAR(4)) + '-8' + ' ' + CAST(YEAR(date) + 1 AS VARCHAR(4)) + '-1' 
       ELSE CAST(YEAR(date) AS VARCHAR(4)) + '-2' + ' ' + CAST(YEAR(date) AS VARCHAR(4)) + '-7' 
      END AS range 
    FROM 
      test 
) 

SELECT 
      site, 
      COUNT(*), 
      range 
FROM 
      cteRanges 
GROUP BY 
      site, 
      range 
ORDER BY 
      range, 
      site; 

당신은 월과 연도를 기준으로 범위를 계산 한 후 결과를 집계.

+0

@BoyPasmo : 천만에. 당신은 코드를 제공하지 않았지만 당신의 프로파일을 조사하고 SQL이 실제로 당신의 것이 아님을 깨달았습니다. 걱정 마세요.하지만 앞으로 지불하십시오. ;) – VBlades

+0

알았습니다! 확실한 것 : D –