2015-02-06 3 views
-1

내 질문을 찾아 주셔서 감사합니다.랭킹 필드를 추가하고 상위 3 개 데이터베이스를 기준으로 돌아 가기

"Date", "Group", "Count Count"를 기반으로 순위를 반환하고 상위 3 위 순위를 부여 할 수 있기를 바랍니다. 예를 들어 1/2/2014 John "BIGGroup1A "100과 10을 팔았습니다. 순위는 제품 10에서 1, 제품 7에서 2로 나타납니다. 같은 날 1/2/2014에 두 가지 그룹에서 55와 55를 팔아서 둘 다 1이어야합니다. 남은 순위는 로직이 뒤 따르는 것과 일치합니다.

내가 SQL에서 솔루션을 주셔서 감사합니다
Date Name Group   ProductName SellCount Rank 
1/2/2014 John BigGroup1A Product7 10   2 
1/2/2014 John BigGroup1A Product10 100   1 
1/2/2014 John BigGroup1B Product2 55   1 
1/2/2014 John Group1A   Product1 55   1 
1/3/2014 John Group1B   Product6 5   1 
1/3/2014 John Group1C   Product9 44   2 
1/3/2014 John Group1C   Product4 55   1 
1/3/2014 John LargeGroup1A Product5 77   1 
1/4/2014 John LargeGroup2A Product8 25   1 
1/5/2014 John LargeGroup2B Product12 660   1 
1/6/2014 John MediumGroup2A Product11 50   1 
1/7/2014 John MediumGroup2A Product3 55   1 

, 내가 새로운 오전과 희망 모두가 도움이 될 수 있습니다

MYTABLE은

Date Name Group   ProductName SellCount 
1/2/2014 John BigGroup1A Product7 10 
1/2/2014 John BigGroup1A Product10 100 
1/2/2014 John BigGroup1B Product2 55 
1/2/2014 John Group1A   Product1 55 
1/3/2014 John Group1B   Product6 5 
1/3/2014 John Group1C   Product9 44 
1/3/2014 John Group1C   Product4 55 
1/3/2014 John LargeGroup1A Product5 77 
1/4/2014 John LargeGroup2A Product8 25 
1/5/2014 John LargeGroup2B Product12 660 
1/6/2014 John MediumGroup2A Product11 50 
1/7/2014 John MediumGroup2A Product3 55 

나는 결과가되고 싶어합니다.

+0

SQL Server 2008에는 RANK() 함수가 있습니다. –

+0

'1/6/2014'의 행은 그날 유일한 항목이므로 순위가 1일까요? – jpw

+0

네, 맞습니다. 방금 편집했습니다. – Nguyenal07

답변

1

당신은이 같은 rank() 윈도우 기능을 사용할 수 있어야합니다 :

select * from (
    select 
    *, 
    rank = rank() over (partition by date, [group] order by date, [group], sellcount desc) 
    from table1 
) t 
where rank <= 3 

는 내부 쿼리가 당신의 사양 및 순위> 3.

와 외부 쿼리 필터 행에 따라 각 행에 순위를 할당을

예를 들어 this SQL Fiddle을 참조하십시오.

+0

나는 SQL을 시도하고 모든 것이 "순위 1"로 반환됩니다. 위에 제공된 "순위"필드에 결과를 제공 할 수있는 다른 함수 또는 필터가 있습니까? 도움을 주셔서 감사합니다 – Nguyenal07

+0

@ Nguyenal07이 순위 지정 함수는 파티션 절을 기반으로 데이터를 그룹으로 나눕니다. 따라서 그룹에 하나 이상의 항목이 있고 (다른 판매액이있는 경우) 항목의 순위가 달라질 수 있습니다. 아이템이 다르다고 확신합니까? 샘플 SQL Fiddle을 보면 다른 순위를 부여합니다. – jpw

+0

왜냐하면 내가 3 일 판매량이 같고 그 중 2 대가 55로 둘 다 2로 라벨을 붙일 것이기 때문에 일을하지 못했습니다. 하나가 두 개일 경우 자동 할당하도록 어떻게해야합니까? 이 : 판매 개수 3 랭크 2, 판매 개수 3 랭크 2, 판매 개수 20, 랭크 1 - @ jpw – Nguyenal07

0

RANK()을 사용하면 원하는 것을 얻을 수 있습니다.

Select *, 
RANK() OVER (PARTITION BY DATE,GROUP ORDER BY SELLCOUNT)AS RANK 
from Table T 

PARTITION BY

랭킹하는 것은 생성 된 그룹 SELLCOUNT에 기초되는 것을 보장하고 DATE GROUP.ORDER BY에 기초하여 그룹으로 결과 집합을 분할한다.

관련 문제