2016-10-06 2 views
0

Как выбрать 100 уникальных кодовых номеров из таблицы, чтобы каждое наблюдение за уникальным кодовым номером было вытащено?Как выбрать 100 уникальных значений?

select top 100* from srv.table01 #THIS WONT WORK 

table01 содержит столбцы Кодовый номер, дата, TransType

образец будет ниже: Я хочу, чтобы получить 100 уникальных номеров кода из моей таблицы таким образом, что все наблюдения этих 100 уникальный код будет включен

codenumber date transtype 
132  09/09/09 Cash 
132  09/05/09 Cash 
132  09/22/09 Card 
132   . 
222   . 
132  09/23/10 Card 
123 
311 
523 
334 
132 

Спасибо

+0

http://stackoverflow.com/questions/tagged/oracle+greatest-n-per-group –

ответ

0
select *from (select *from table group by codenumber) where ROWNUM<101; 

Это должно работать!

+0

Это не даст уникального кодового номера –

+0

, который не заверит меня, что я получил все уникальные 100 лучших кодовых номеров. – icychamp

0

Попробуйте это:

12с:

select codenumber 
     from srv.table01 
    group by codenumber 
fetch next 100 rows only 

11r2 и раньше:

select * 
    from ( select codenumber 
      from srv.table01 
     group by codenumber) 
where rownumber <= 100 
+0

В чем разница между FETCH FIRST и FETCH NEXT, в данном случае? – jarlh

+0

Вам не нужен ORDER по второму запросу второго запроса? – jarlh

+0

Jarlh, нет действительно ,. они оба действительны для грамматических целей. как использовать следующий для: "* SELECT * FROM T ORDER BY I OFFSET 10 ROWS FETCH NEXT 10 ROWS ONLY *" здесь, следующий является грамматически правильным. (Я должен был использовать сначала в моем примере). То же, что и «create procedure ABC * AS *», а в пакете «Процедура ABC * есть *» вы можете использовать «is» или «as». Что касается заказа, вопрос на самом деле не упоминал о каком-либо заказе. –

-2

Я получил это так! У меня есть 100 уникальных кодовых номеров, и я получил всю свою запись из таблицы. Спасибо за помощь, хотя :)

select * 
from 
(select TOP 100* 
from(select distinct codenumber 
from srv.table01)x) as a 
left Join srv.table01 as b 
on a.codenumber=b.codenumber 
+1

Это решение не будет работать с Oracle. –

+0

Я не думаю, что у Oracle есть ключевое слово TOP –

+0

Sql? Я использую жабу. – icychamp

0

Вы после всех строк для 100 кодовых имен? Если это так, то я думаю, что вы после этого что-то вроде:

select codenumber, date, transtype 
from (select codenumber, 
       date, 
       transtype, 
       dense_rank() over (order by codenumber) dr 
     from srv.table01) 
where dr <= 100; 

Это работает на Oracle, и я считаю, он должен работать на SQL Server тоже. Это также имеет то преимущество, что один раз доступ к таблице один, но то, делает ли сортировка для получения dense_rank более дорогостоящей, чем выполнение второго прохода по таблице, - это то, что вам нужно будет протестировать против ваших данных.

Смежные вопросы