T-SQL: как получить 1/2 от общего числа строк (по некоторым критериям) или 50 первых строк? - PullRequest
3 голосов
/ 13 августа 2010

Мне интересно, как в T-SQL я могу получить - скажем, 1/2 общего числа строк, образующих таблицу (по некоторым критериям) или даже первые 50 строк (по некоторым критериям тоже)?*

Ответы [ 4 ]

3 голосов
/ 13 августа 2010

Для выбора 50 верхних строк:

SELECT TOP 50 *
FROM table1
WHERE ...
ORDER BY ...

Чтобы выбрать первую половину набора результатов, используйте PERCENT :

SELECT TOP 50 PERCENT *
FROM table1
WHERE ...
ORDER BY ...

Не забудьте добавить ORDER BY, если вы хотите, чтобы результаты были согласованными.

2 голосов
/ 13 августа 2010

Первый:

SELECT TOP 50 PERCENT a, b, c FROM table

Второй:

SELECT TOP 50 a, b, c FROM table

Как правило, делать это не рекомендуется, если вы также не предоставляете ORDER BY (и в тех случаях, когдабудет отлично работать, если не указывать ORDER BY, ваш код будет более понятным и более устойчивым к изменениям в деталях базовых таблиц, если вы его вставите).

Пейджинг (например, возврат блока x изу строк) является более громоздким в SQLServer, чем многие другие реляционные базы данных на языке SQL (если честно, более громоздким, чем почти все из них), но можно сделать с помощью ROW_NUMBER:

WITH OrderedTable AS
(
  SELECT a, b, c, ROW_NUMBER() OVER (ORDER BY d) as rowNumber
  FROM table
)
SELECT a, b, c FROM OrderedTable
WHERE rowNumber between 31 and 40

Выберет третьюнабор из десяти строк, упорядоченный по столбцу d.

Этот последний метод также необходим, когда предел исходит из переменной, так как TOP не допускает что-то вроде TOP @ number.

1 голос
/ 13 августа 2010

Следующие работы в MS SQL 2005 и 2008

select top 50 PERCENT * from x
1 голос
/ 13 августа 2010

с использованием SQL TOP предложение

Синтаксис SQL Server

 SELECT TOP number|percent column_name(s)
   FROM table_name

 example : 

   SELECT TOP 50 PERCENT * FROM tablename

Синтаксис MySQL

SELECT column_name(s)
FROM table_name
LIMIT number

Синтаксис Oracle

SELECT column_name(s)
FROM table_name
WHERE ROWNUM <= number
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...