Как использовать порядок с помощью union all в sql?
Я попробовал sql-запрос, указанный ниже:
SELECT * FROM (SELECT *
FROM TABLE_A ORDER BY COLUMN_1)DUMMY_TABLE
UNION ALL
SELECT * FROM TABLE_B
Это приводит к следующей ошибке:
Предложение ORDER BY недопустимо в представлениях, встроенных функциях, полученных таблицы, подзапросы и общие выражения таблицы, если только TOP или FOR Также указывается XML.
Мне нужно использовать порядок в объединении всех. Как это сделать?
Ответы
Ответ 1
SELECT *
FROM
(
SELECT * FROM TABLE_A
UNION ALL
SELECT * FROM TABLE_B
) dum
-- ORDER BY .....
но если вы хотите, чтобы все записи из Table_A
находились в верхней части списка результатов, вы можете добавить пользовательское значение, которое вы можете использовать для заказа,
SELECT *
FROM
(
SELECT *, 1 sortby FROM TABLE_A
UNION ALL
SELECT *, 2 sortby FROM TABLE_B
) dum
ORDER BY sortby
Ответ 2
Вам не обязательно иметь скобки. Вы можете сортировать напрямую:
SELECT *, 1 AS RN FROM TABLE_A
UNION ALL
SELECT *, 2 AS RN FROM TABLE_B
ORDER BY RN, COLUMN_1
Ответ 3
Не прямая реакция OP, но я думал, что буду вдаваться в нее, особенно в ответ на сообщение ER ERROR, которое указывает на вас в другом направлении.
Все эти ответы относятся к общему ORDER BY, как только набор записей был извлечен, и вы сортируете лот.
Что делать, если вы хотите ORDER BY каждую часть UNION независимо, и все еще хотите, чтобы они "присоединились" к тому же SELECT?
SELECT pass1.* FROM
(SELECT TOP 1000 tblA.ID, tblA.CustomerName
FROM TABLE_A AS tblA ORDER BY 2) AS pass1
UNION ALL
SELECT pass2.* FROM
(SELECT TOP 1000 tblB.ID, tblB.CustomerName
FROM TABLE_B AS tblB ORDER BY 2) AS pass2
Обратите внимание, что TOP 1000 является суровым номером. Используйте достаточно большое количество, чтобы захватить все требуемые данные.
Ответ 4
Select 'Shambhu' as ShambhuNewsFeed,Note as [News Fedd],NotificationId
from Notification with(nolock) where [email protected]
Union All
Select 'Shambhu' as ShambhuNewsFeed,Note as [Notification],NotificationId
from Notification with(nolock)
where [email protected]
order by NotificationId desc