2013-11-26 1 views
1

내 데이터베이스에 열의 Top 10 발생 쿼리를 작성하려고합니다. 하지만 모드별로 그룹별로보고 싶지 않습니다.SQL Server : 그룹을 사용하지 않고 TOP 10 쿼리를 by by

40000 개의 행과 20 개의 열이있는 데이터베이스가 있는데 특정 열에 상위 10 개 항목이있는 x 행을 반환하는 쿼리를 작성하고 싶습니다.

Select top 10 colum.name 
from table.name 

내가 무엇을 얻을하는 데이터베이스의 10 행입니다 :

내가 이것을 사용

.

내가 이것을 사용

는 :
select top 10 colum.name 
From table.name 
group by colum.name 
order by colum.name DESC 

나는 나의 열을 기준으로 제 10 대 발생하지만 그룹을 얻고, 내가 원하는하지만 표시되는 모든 행과 같은 10를 참조하는 것입니다.

이것이 바보 같은 질문인지는 모르겠지만이 모든 것을 내 시원하게 잃어 가고 있습니다!

미리 감사드립니다.

+0

귀하의 질문이 명확하지 않다. 원하는 출력을 추가 할 수 있습니까? – DevelopmentIsMyPassion

+0

하나의 열 값에는 많은 행이있을 수 있습니다. 이 경우 어떤 행을 표시하고 싶습니까? – usr

+0

니키 피시 : ** 칼럼 ** ("m"- "n") - "콜럼"이 아닙니다 ... (귀하의 게시물에 계속 철자가 잘못 표시되었습니다) –

답변

2

사용할 수 있습니다 :

;WITH Top10Distinct AS 
(
    SELECT DISTINCT TOP 10 YourColumn 
    FROM dbo.YourTable 
    ORDER BY YourColumn DESC 
) 
SELECT * 
FROM dbo.YourTable tbl 
INNER JOIN Top10Distinct cte ON tbl.YourColumn = cte.YourColumn 

열팽창 계수가 먼저 YourColumn과의 TOP 10 DISTINCT 값을 가져옵니다 실제 "기본"테이블에 대해 상위 10 개 값을 결합합니다. dbo.YourTable을 검색하여 상위 10 개의 고유 한 열 값 중 하나를 갖는 기본 테이블에서 전체 행을 으로 검색합니다.

0
you could use row_number()/rank()/dense_rank() depending on the requirement 

예 :

with cte as 
(
select name,ROW_NUMBER() over (id order by id) as rn 
); 

select * from cte where rn <=10 

이 출력하면 10 행

는이 같은 것을
0

당신은 더러운 하위 쿼리를 사용할 수 있습니다

Select column.name 
from table.name 
Where column.name IN (Select top 10 column.name 
         from table.name 
         group by column.name 
         order by count(*) desc)