2014-01-09 4 views
3

Я пытаюсь выбрать первые 5 сумм выше 2000 и первые 5 ниже 2000 и вернуть данные в одном наборе результатов.Получите ближайшие более высокие и более низкие строки в SQL

SELECT TOP 5 * 
FROM bid 
WHERE amount >= 2000 
ORDER BY amount ASC 
UNION 
SELECT TOP 5 * 
FROM bid 
WHERE amount < 2000 
ORDER BY amount DESC 

Похоже, что это не так, как union предполагается использовать, как я получаю сообщение об ошибке выполнения.

Incorrect syntax near the keyword 'union'. 

Каков правильный способ ввода желаемого запроса?

+1

Пожалуйста, помечать вопрос с СУБД вы используете, так как они отличаются в деталях, как это. – Barmar

+0

«Порядок от» - это то, что вас достает; см. здесь: http://stackoverflow.com/questions/4715820/how-to-order-by-with-union – Bandrami

ответ

3
SELECT * 
FROM (SELECT TOP 5 * 
     FROM bid 
     WHERE amount >= 2000 
     ORDER BY amount ASC) t1 
UNION 
SELECT * 
FROM (SELECT TOP 5 * 
     FROM bid 
     WHERE amount < 2000 
     ORDER BY amount DESC) t2 

Вы можете добавить дополнительный заказ на результаты:

SELECT * 
FROM (SELECT * 
     FROM (SELECT TOP 5 * 
       FROM bid 
       WHERE amount >= 2000 
       ORDER BY amount ASC) t1 
     UNION 
     SELECT * 
     FROM (SELECT TOP 5 * 
       FROM bid 
       WHERE amount < 2000 
       ORDER BY amount DESC) t2) t3 
ORDER BY t3.amount 
Смежные вопросы