Вы не можете сделать это в одном запросе, вам нужно получить количество строк и затем использовать его для вашего top
запроса, например,
DECLARE @NumRows INT;
SELECT @NumRows = COUNT(*)/2
FROM SomeTable;
SELECT TOP(@NumRows) TargetColumn
FROM SomeTable;
Это потому, что TOP
- простая функция, предназначенная для ограничения количества возвращаемых строк. Необходимость подсчета строк требует возврата всех строк, что противоречит.
Если вы хотите sh выполнить эту операцию в одном запросе, см. Ответ @ GMB.
Для В таблице, на которой я тестировал, это решение заняло 28%, а GMB - 72% без заказа. Если вы добавили заказ по этому решению, заняли 52%, а GMB - 48%. Таким образом, наиболее эффективный запрос зависит от вашего конкретного c сценария.