Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Сортировка запроса меж двух Union All  [new]
Exproment
Member

Откуда:
Сообщений: 416
Добрый день.

Через Union All соединяю три запроса. Возникла необходимость отсортировать центральный запрос по полю, которого нет в результирующем наборе(оно там не нужно, а другие два запроса дополняют текущий литералами). т.е. нужно нечто вида:
select Str = 'Строка'
union ALL
select Str = 'Field' + cast(T.ID as varchar(max))
from  Table T
order by T.ID 
union all
select Str = 'Строка'


Единственный вариант который я вижу это сделать как-то так:
select ID = 0
         Str = 'Строка'
union ALL
select T.ID
         Str = 'Field' + T.ID
from  Table T 
union all
select ID = --Максимальноve значению int'а
         Str = 'Строка'
order by ID


Может есть по лучше идеи ?(вопрос не привязан к конкретной задаче)
18 окт 12, 10:44    [13338730]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка запроса меж двух Union All  [new]
Добрый Э - Эх
Guest
введи дополнительное поле - номер секции UNION ALL и сортируй по номеру секции + по нужному полю...
18 окт 12, 10:47    [13338757]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка запроса меж двух Union All  [new]
Glory
Member

Откуда:
Сообщений: 104751
Exproment
Возникла необходимость отсортировать центральный запрос по полю, которого нет в результирующем наборе

Вы думаете, что в конечном результате это гарантирует какой-то порядок записей ?
18 окт 12, 10:48    [13338766]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка запроса меж двух Union All  [new]
Добрый Э - Эх
Guest
ну, что-то типа такого:

select 1 as x_num, 
         0 as ID,
         Str = 'Строка'
union ALL
select 2 as x_num, 
         T.ID,
         Str = 'Field' + T.ID
from  Table T 
union all
select 3 as x_num,
         0 as ID,
         Str = 'Строка'
order by x_num, ID
18 окт 12, 10:50    [13338776]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка запроса меж двух Union All  [new]
Exproment
Member

Откуда:
Сообщений: 416
Добрый Э - Эх, кстати да... вариант. А как вы предлагаете ввести номер секции ? Добавить в результирующий набор и окутать весь Union All запрос в еще один селект(чтоб он не попал в конечный набор) ?
18 окт 12, 10:50    [13338780]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка запроса меж двух Union All  [new]
Exproment
Member

Откуда:
Сообщений: 416
Glory, я не нашел в доках Union'а упоминания, гарантирует ли он порядок.
18 окт 12, 10:51    [13338786]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка запроса меж двух Union All  [new]
Добрый Э - Эх
Guest
Exproment,

я тебе успел ответить чуть раньше, чем ьы успел задать вопрос
18 окт 12, 10:51    [13338787]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка запроса меж двух Union All  [new]
Exproment
Member

Откуда:
Сообщений: 416
Добрый Э - Эх
ну, что-то типа такого:

Ну собственно да... спасибо. Такой вариант вполне подойдет... :)
18 окт 12, 10:52    [13338790]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка запроса меж двух Union All  [new]
Glory
Member

Откуда:
Сообщений: 104751
Exproment
Glory, я не нашел в доках Union'а упоминания, гарантирует ли он порядок.

И какой смысл тогда в сортировки одного из запросов, если это сортировка не гарантирована в конечном результате ?
18 окт 12, 10:53    [13338796]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка запроса меж двух Union All  [new]
Exproment
Member

Откуда:
Сообщений: 416
Glory, а может она и гарантирует :) я не нашел опровержение этому :) Но вы правы...
18 окт 12, 11:18    [13338974]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка запроса меж двух Union All  [new]
Glory
Member

Откуда:
Сообщений: 104751
Exproment
Glory, а может она и гарантирует :) я не нашел опровержение этому :)


When ORDER BY is used in the definition of a view, inline function, derived table, or subquery, the clause is used only to determine the rows returned by the TOP clause. The ORDER BY clause does not guarantee ordered results when these constructs are queried, unless ORDER BY is also specified in the query itself.
18 окт 12, 11:21    [13339001]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка запроса меж двух Union All  [new]
Exproment
Member

Откуда:
Сообщений: 416
Glory, прошу прощения, в следующий раз буду внимательнее при чтении документации. Спасибо :)
18 окт 12, 12:41    [13339746]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить