SQL-запрос - Использование Order By в UNION - PullRequest
83 голосов
/ 18 октября 2008

Как программно отсортировать объединенный запрос при извлечении данных из двух таблиц? Например,

SELECT table1.field1 FROM table1 ORDER BY table1.field1
UNION
SELECT table2.field1 FROM table2 ORDER BY table2.field1

Выдает исключение

Примечание: это делается на ядре базы данных MS Access Jet

Ответы [ 16 ]

2 голосов
/ 09 октября 2011

Вот как это делается

select * from 
    (select top 100 percent pointx, pointy from point
     where pointtype = 1
     order by pointy) A
union all
select * from 
    (select top 100 percent pointx, pointy from point
     where pointtype = 2
     order by pointy desc) B
1 голос
/ 24 января 2012

Используя порядок отдельно, каждое подмножество получает порядок, но не весь набор, что вам и нужно, объединяя две таблицы.

Вы должны использовать что-то подобное, чтобы иметь один упорядоченный набор:

SELECT TOP (100) PERCENT field1, field2, field3, field4, field5 FROM 
(SELECT table1.field1, table1.field2, table1.field3, table1.field4, table1.field5 FROM table1
UNION ALL 
SELECT table2.field1, table2.field2, table2.field3, table2.field4, table2.field5 FROM  table2) 
AS unitedTables ORDER BY field5 DESC
0 голосов
/ 23 мая 2016

Для Sql Server 2014/2012 / Другое (не проверено):

SELECT * FROM 
(
  SELECT table1.field1 FROM table1 ORDER BY table1.field1
) 
as DUMMY_ALIAS1

UNION ALL

SELECT * FROM
( 
  SELECT table2.field1 FROM table2 ORDER BY table2.field1
) 
as DUMMY_ALIAS2
0 голосов
/ 14 июля 2015
(SELECT FIELD1 AS NEWFIELD FROM TABLE1 ORDER BY FIELD1)
UNION
(SELECT FIELD2 FROM TABLE2 ORDER BY FIELD2)
UNION
(SELECT FIELD3 FROM TABLE3 ORDER BY FIELD3) ORDER BY NEWFIELD

Попробуй это. Это сработало для меня.

0 голосов
/ 13 марта 2015

При необходимости сохранить внутреннюю сортировку:

SELECT 1 as type, field1 FROM table1 
UNION 
SELECT 2 as type, field1 FROM table2 
ORDER BY type, field1
0 голосов
/ 18 октября 2008

Вторая таблица не может включать имя таблицы в предложении ORDER BY.

Итак ...

SELECT table1.field1 FROM table1 ORDER BY table1.field1
UNION
SELECT table2.field1 FROM table2 ORDER BY field1

Не выдает исключение

...