2014-04-11 2 views
1

나는 아마도 매우 까다로운 질문이 있습니다. 나는 아주 간단한 비용과 테이블이 있습니다행 값을 "기타"로 결합

Cost name, cost value 

을 그리고 나는 TOP 10 아무 문제가 없다 이름과 값을 비용,하지만 출력을 원하는 : 11 행으로, 나는 모든 사람이 "로 요약 출력하고자 기타 "표시 ... SQL 쿼리로 가능합니까?

내 질문에 대한 이해를 돕고 모든 유용한 답변에 대해 매우 감사드립니다.

안부,

토비아스

UPDATE :

enter image description here

< < 데이터 예 >>이 같은

+1

당신이 샘플 즉 데이터 출력을 제공 할 수 있습니까? –

답변

3

시도하십시오 :

;with T as(
    select *, ROW_NUMBER() over (order by value desc) RNum 
    from YourTable 
) 
select value, name from T 
where RNum<=10 

union all 

select sum(value), 'Others' 
from T 
where RNum>10 
+1

대단히 고맙습니다. 불행히도, 실제 테이블은 매우 복잡하므로 시간이 좀 필요합니다.하지만 가지고있을 때 돌아올 것입니다! –

+0

나는 당신의 모범을 보았고 아주 잘 작동했습니다! RowNumber를 통해 정렬하면 'Others (기타)'열이 끝날 것입니다. –

1

아마도 뭔가?

select * from (select top (10) name, value from costs order by value) s1 
UNION (
    select 'other', sum(value) from costs 
    where name not in (select top 10 Name from costs order by value) 
) 

이것은 이름이 비용상의 PK라고 가정합니다.

+0

대단히 고맙습니다. 불행히도, 실제 테이블은 복잡하기 때문에 약간의 시간이 필요합니다.하지만 가지고있을 때 돌아올 것입니다! –

+0

대단히 감사합니다.이 예제는 제 경우에 사용하는 것이 매우 까다 롭지만 어쨌든 감사드립니다! –

1
;with CTE as(SELECT Name , 
value ,row_number() OVER (ORDER BY Name) AS RowNumber FROM #Temp) 

select Name,value 
from cte 
Where RowNumber<11 
union 
select 'Other',Sum(value) 
from cte 
Where RowNumber>=11 

샘플 Fiddle