Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 как получить любые 10 записей из запроса  [new]
sessy
Member

Откуда:
Сообщений: 34
у меня есть след запрос:
select distinct pers_id
from pers_naz
where kat_id=010217

в результате выходит например 4000 записей, мне нужно любые только 10 записей.
пробовала
select top 10 distinct pers_id
from pers_naz
where kat_id=010217

так не работает. подскажите пож. как добиться нужного результата
21 сен 09, 08:38    [7685179]     Ответить | Цитировать Сообщить модератору
 Re: как получить любые 10 записей из запроса  [new]
DENIS_CHEL
Member

Откуда:
Сообщений: 23097
select distinct top 10  pers_id
from pers_naz
where kat_id=010217 

---------------------------------------------------------
- Ну вы тут и нафлудили! - сказал Геракл, зайдя на Авгиев форум.
21 сен 09, 08:47    [7685203]     Ответить | Цитировать Сообщить модератору
 Re: как получить любые 10 записей из запроса  [new]
nrg_fly
Member

Откуда:
Сообщений: 138
DENIS_CHEL
select distinct top 10  pers_id
from pers_naz
where kat_id=010217 

---------------------------------------------------------
- Ну вы тут и нафлудили! - сказал Геракл, зайдя на Авгиев форум.


select distinct top 10  pers_id
from pers_naz
where kat_id=010217
ORDER BY NEWID( )

можно это сделать через функцию NEWID ( )
21 сен 09, 09:41    [7685356]     Ответить | Цитировать Сообщить модератору
 Re: как получить любые 10 записей из запроса  [new]
DENIS_CHEL
Member

Откуда:
Сообщений: 23097
nrg_fly
DENIS_CHEL
select distinct top 10  pers_id
from pers_naz
where kat_id=010217 

---------------------------------------------------------
- Ну вы тут и нафлудили! - сказал Геракл, зайдя на Авгиев форум.


select distinct top 10  pers_id
from pers_naz
where kat_id=010217
ORDER BY NEWID( )

можно это сделать через функцию NEWID ( )


Я не топик стартер, я всего лишь указала, что в операторе select сначала идет ключевое слово distinct, а уже потом top.

PS зачем ORDER BY NEWID( ), автор просил “ мне нужно любые только 10 записей. ”?
21 сен 09, 09:53    [7685400]     Ответить | Цитировать Сообщить модератору
 Re: как получить любые 10 записей из запроса  [new]
Glory
Member

Откуда:
Сообщений: 104760
Для SQL2005

SELECT FirstName, LastName
FROM Person.Contact
TABLESAMPLE (10 ROWS)
21 сен 09, 10:17    [7685508]     Ответить | Цитировать Сообщить модератору
 Re: как получить любые 10 записей из запроса  [new]
rsolanov
Member

Откуда:
Сообщений: 930
Glory
Для SQL2005

SELECT FirstName, LastName
FROM Person.Contact
TABLESAMPLE (10 ROWS)

Всегда возвращает данные в количестве ноль строк.
21 сен 09, 10:27    [7685568]     Ответить | Цитировать Сообщить модератору
 Re: как получить любые 10 записей из запроса  [new]
rsolanov
Member

Откуда:
Сообщений: 930
rsolanov
Glory
Для SQL2005

SELECT FirstName, LastName
FROM Person.Contact
TABLESAMPLE (10 ROWS)

Всегда возвращает данные в количестве ноль строк.

Я правда пробовал писать запрос на MS SQL SERVER 2008 (SP1)
21 сен 09, 10:29    [7685576]     Ответить | Цитировать Сообщить модератору
 Re: как получить любые 10 записей из запроса  [new]
rsolanov
Member

Откуда:
Сообщений: 930
BOL:
Важно!
Если необходима действительно случайная выборка отдельных строк, следует изменить запрос так, чтобы он отфильтровывал строки по случайному признаку, не используя TABLESAMPLE. Например, следующий запрос использует функцию NEWID для возвращения примерно одного процента строк из таблицы Sales.SalesOrderDetail.

SELECT * FROM Sales.SalesOrderDetail

WHERE 0.01 >= CAST(CHECKSUM(NEWID(), SalesOrderID) & 0x7fffffff AS float)

/ CAST (0x7fffffff AS int)

Столбец SalesOrderID включен в выражение CHECKSUM, позволяя вычислять функцию NEWID() для каждой из строк для выполнения построчной выборки. Результатом выражения CAST(CHECKSUM(NEWID(), SalesOrderID) & 0x7fffffff AS float / CAST (0x7fffffff AS int) является случайное значение типа float в диапазоне от 0 до 1.
21 сен 09, 10:31    [7685582]     Ответить | Цитировать Сообщить модератору
 Re: как получить любые 10 записей из запроса  [new]
Glory
Member

Откуда:
Сообщений: 104760
rsolanov
BOL:
Важно!
Если необходима действительно случайная выборка отдельных строк,

А вам нужна "действительно случайная выборка" ?
21 сен 09, 10:32    [7685593]     Ответить | Цитировать Сообщить модератору
 Re: как получить любые 10 записей из запроса  [new]
rsolanov
Member

Откуда:
Сообщений: 930
Glory
rsolanov
BOL:
Важно!
Если необходима действительно случайная выборка отдельных строк,

А вам нужна "действительно случайная выборка" ?

Автор назвал тему "как получить любые 10 записей из запроса", хоть он и не указал что любых-именно случайных, но думаю, что именно это и имел в виду.
Хотя согласен, вопрос можно толковать двояко.
21 сен 09, 10:37    [7685613]     Ответить | Цитировать Сообщить модератору
 Re: как получить любые 10 записей из запроса  [new]
sessy
Member

Откуда:
Сообщений: 34
спасибо большое, наоборот написать как-то не догадалась )))
21 сен 09, 10:46    [7685660]     Ответить | Цитировать Сообщить модератору
 Re: как получить любые 10 записей из запроса  [new]
rsolanov
Member

Откуда:
Сообщений: 930
sessy
спасибо большое, наоборот написать как-то не догадалась )))

Ваш окончательный запрос:
select distinct top 10  pers_id
from pers_naz
where kat_id=010217 
ORDER BY CHECKSUM(NEWID(), pers_id)
21 сен 09, 10:49    [7685678]     Ответить | Цитировать Сообщить модератору
 Re: как получить любые 10 записей из запроса  [new]
sessy
Member

Откуда:
Сообщений: 34
rsolanov
sessy
спасибо большое, наоборот написать как-то не догадалась )))

Ваш окончательный запрос:
select distinct top 10  pers_id
from pers_naz
where kat_id=010217 
ORDER BY CHECKSUM(NEWID(), pers_id)


при выполнении данного запроса выдает ошибку:
Server: Msg 145, Level 15, State 1, Line 1
ORDER BY items must appear in the select list if SELECT DISTINCT is specified.

что должен был сделать данный запрос?
21 сен 09, 12:10    [7686290]     Ответить | Цитировать Сообщить модератору
 Re: как получить любые 10 записей из запроса  [new]
rsolanov
Member

Откуда:
Сообщений: 930
sessy,

А без слова DISTINCT следующий запрос может выдать повторяющиеся строки?
select distinct pers_id
from pers_naz
where kat_id=010217 
Если нет, то просто уберите слово DISTINCT, в противном случае перепишите запрос:
select top 10  pers_id
from pers_naz
where kat_id=010217 
GROUP BY pers_id
ORDER BY CHECKSUM(NEWID(), pers_id)
21 сен 09, 12:33    [7686465]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить