Объединенные запросы с подзапросами нарушают порядок предложений - PullRequest
1 голос
/ 12 июля 2011

У меня есть запрос:

select * from (select top 100 percent ... from [table] 
    where [field1] is not null
    order by [field1]) a 
union all 
select * from (select top 100 percent ... from [table]
    where [field1] is null 
    order by [field2]) b

Подзапросы правильно упорядочивают свои результаты. Я хочу точные результаты первого подзапроса, ТОГДА точные результаты второго подзапроса. Тем не менее, я на самом деле получаю объединенные результаты, упорядоченные каким-то странным образом, от которого я даже не могу различить образец. У меня есть [field2] значения, разбросанные по результирующему набору, по-видимому, случайно.

Как получить результаты первого запроса сверху, а результаты второго запроса снизу?

Редактировать: Чтобы уточнить, я хочу, чтобы верхний запрос был упорядочен по его собственным условиям, а затем Я хочу, чтобы нижний запрос упорядочился по его собственным условиям.

Ответы [ 2 ]

4 голосов
/ 12 июля 2011

Я не уверен, предназначен ли UNION ALL для сохранения порядка строк.
Вы можете принудительно изменить порядок, используя следующую инструкцию:

select [field1] from
(
    select * from
    (select 1 as query_number, [field1], [field1] as [order_field] from [table] 
        where [field1] is not null) a 
    union all 
    select * from
    (select 2 as query_number, [field1], [field2] as [order_field] from [table]
        where [field1] is null) b
)
order by query_number, [order_field];
0 голосов
/ 12 июля 2011
select * from (select top 100 percent ...,  1 AS q from [table] 
    where [field1] is not null
    order by [field1]) a 
union all

select * from (select top 100 percent ...,  2 AS q from [table]
    where [field1] is null 
    order by [field2]) b

order by q
       , CASE q
           WHEN 1 THEN fieldX   
           WHEN 2 THEN fieldY
         END
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...