2013-03-21 2 views
0

분기별로 파티션을 나누고 (1 월 -3 월, 4 월 -6 월, 6 월 -9 월) 다른 분기를 추가하여 분기 별을 추적하고 Q1 2011이 본질적으로 Quarters and Tracker Column을 어떻게 추가 할 것인가? ROW_NUMBER(), NTILE 함수를 살펴 봤지만 몇 개월과 결합하는 방법을 모르겠습니다.분기 별 파티션

--- Period --- Quarters---Tracker 
2012-05-06  2   1 
2012-05-20  2   1   
2012-06-03  2   1 
2012-07-01  3   2 
2012-08-12  3   2 
2012-08-26  3   2 
2012-09-09  3   2 
2012-10-07  4   3 
2012-10-21  4   3 
2012-11-04  4   3 
2012-11-18  4   3 
2012-12-02  4   3 
2012-12-16  4   3 
2012-12-30  4   3 
2013-01-13  1   4 
2013-01-27  1   4 

정말 STUCK!

+0

열 쿼터는 이미 제공됩니까? –

+0

그게 단지 날짜 열만이되어야하는 방법의 예입니다. –

답변

2

나는 테이블 정의에 분기 CASE 논리를 넣어,하지만 당신은 당신의 테이블을 수정하지 않아도 당신은 또한 쿼리에 넣을 수 있습니다.

Create Table Blah 
(
     SampleDate Date Default(Convert(Date,Getdate())), 
     Quarters As ( Case 
         When Month(SampleDate) Between 1 And 3 Then 1 
         When Month(SampleDate) Between 4 And 6 Then 2 
         When Month(SampleDate) Between 7 And 9 Then 3 
         Else 4 End) 
) 

Insert Blah (SampleDate) 
Select '2012-05-06' 
Union All 
Select '2012-05-20' 
Union All 
Select '2012-06-03' 
Union All 
Select '2012-07-01' 
Union All 
Select '2012-08-12' 
Union All 
Select '2012-09-09' 
Union All 
Select '2012-10-07' 
Union All 
Select '2012-11-04' 
Union All 
Select '2012-12-16' 
Union All 
Select '2013-01-13' 
Union All 
Select '2013-01-27' 

Select *, 
     Dense_Rank() Over (Order By Year(SampleDate),Quarters) As Tracker 
From Blah 
+0

에서 다음을 실행하면 오류가 발생합니다. –

+0

다음 이 실행하려고하면 오류가 발생합니다. 메시지 213, 수준 16, 수준 1, 제공된 값의 열 이름 또는 번호가 테이블 정의와 일치하지 않습니다. –

+0

지금 사용해보십시오. 특별히 InsertDate 열을 삽입했습니다. –

0

간단한 열로 실제 분기를 나타내시겠습니까? 2012-Q1, 2011-Q1, 2010-Q1에 SQL 파티션을 사용 하시겠습니까? 아니면 2 열을 원하십니까? 하나는 파티셔닝을하고, 다른 하나는 실제로 연도를 나타낼 것입니까?

생각해 보면 카운터가 필요합니까? 다른 컬럼을 올해로 설정하지 못했습니까?

그래서 2 개의 열이 있습니다. 분기를 나타내는 하나, 다른 년

quarter year 
1  2011 
1  2012 
1  2010 
+0

글쎄 나중에 데이터 (숫자)가있는 추가 열이 있고 2012-Q1, 2011-Q1 등을 기준으로 평균이됩니다. .. 어느 접근법을 제안했는지 또는 내가 취할 수있는 또 다른 접근 방법이 있습니까? –

+0

사용할 수있는 경우 (SQL Server Standard는 지원하지 않음) 파티션을 사용하십시오. 그것들은 조금 더 많은 작업이지만 성능은 현명합니다. 또한 데이터를 정리하는 것이 훨씬 쉽습니다. DELETE * FROM table1 WHERE quarter = 1 AND year = 2012 대신에 간단히 테이블을 잠그는 파티션을 삭제할 수 있습니다. 후자는 행을 삭제하는 동안 테이블을 잠급니다. http://msdn.microsoft.com/en-US/library/ms345146(v=SQL.90).aspx – Rgwan

관련 문제