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

Откуда:
Сообщений: 5
Здравствуйте!
Хочу объединить (UNION) два селекта, в одном из которых используется ORDER BY.
Суть задачи в том, чтобы отсортировать список дней рождения в порядке удаления от текущей даты.

Пишу такое:

select * from Birthdays
where MONTH (Birthdays.Birthday)>=(select Month (getdate()))
union
select * from Birthdays
where MONTH (Birthdays.Birthday)<(select Month (getdate()))
order by MONTH (Birthdays.Birthday)

Оба селекта по отдельности работают. Вместе - нет.
Когда пытаюсь взять второй селект в скобки, выдает ошибку: Incorrect syntax near the keyword 'order'.
29 дек 09, 14:38    [8132732]     Ответить | Цитировать Сообщить модератору
 Re: ORDER BY во втором селекте  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
select * from
   (
select * from Birthdays
where MONTH (Birthdays.Birthday)>=(select Month (getdate()))
union
select * from Birthdays
where MONTH (Birthdays.Birthday)<(select Month (getdate()))
   ) a
order by MONTH(Birthday)
29 дек 09, 14:43    [8132800]     Ответить | Цитировать Сообщить модератору
 Re: ORDER BY во втором селекте  [new]
win_99
Member

Откуда:
Сообщений: 5
неа. Так SQL сначала объединит два селекта, а потом отсортирует весь результат объединения. А мне нужно отсортировать только второй селект.

В предложенном варианте данные распределятся так:
1980-01-10
1968-02-15
1981-03-20
1981-03-21
1975-04-01
1977-12-30
1970-12-31

А мне нужно так:
1977-12-30
1970-12-31
1980-01-10
1968-02-15
1981-03-20
1981-03-21
1975-04-01
29 дек 09, 15:00    [8132968]     Ответить | Цитировать Сообщить модератору
 Re: ORDER BY во втором селекте  [new]
_djХомяГ
Guest
BOL

ORDER BY and COMPUTE clauses to define the order of the final results or compute summary values are allowed only at the end of the UNION statement. They cannot be used within the individual queries that make up the UNION statement.
29 дек 09, 15:04    [8133019]     Ответить | Цитировать Сообщить модератору
 Re: ORDER BY во втором селекте  [new]
win_99
Member

Откуда:
Сообщений: 5
вот черт. Обидно.
29 дек 09, 15:07    [8133046]     Ответить | Цитировать Сообщить модератору
 Re: ORDER BY во втором селекте  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
win_99
вот черт. Обидно.
Ну, так придумайте какой-нибудь альтернативный способ сортировки...
Вот вам "вторую половину" надо отсортировать по месяцам, а каков порядок в первой половине вас устроит?
29 дек 09, 15:10    [8133086]     Ответить | Цитировать Сообщить модератору
 Re: ORDER BY во втором селекте  [new]
O_val
Member

Откуда:
Сообщений: 157
select * from
   (
select sort = 1, Birthday from Birthdays
where MONTH (Birthdays.Birthday)>=(select Month (getdate()))
union
select sort = 2, Birthday  from Birthdays
where MONTH (Birthdays.Birthday)<(select Month (getdate()))
   ) a
order by sort , MONTH(Birthday)
29 дек 09, 15:13    [8133110]     Ответить | Цитировать Сообщить модератору
 Re: ORDER BY во втором селекте  [new]
win_99
Member

Откуда:
Сообщений: 5
tpg
win_99
вот черт. Обидно.
Ну, так придумайте какой-нибудь альтернативный способ сортировки...
Вот вам "вторую половину" надо отсортировать по месяцам, а каков порядок в первой половине вас устроит?


И первую, и вторую половину надо отсортировать по месяцам, дням (там не дописана сортировка по дням в первом запросе), но по отдельности.
29 дек 09, 15:18    [8133163]     Ответить | Цитировать Сообщить модератору
 Re: ORDER BY во втором селекте  [new]
win_99
Member

Откуда:
Сообщений: 5
O_val
select * from
   (
select sort = 1, Birthday from Birthdays
where MONTH (Birthdays.Birthday)>=(select Month (getdate()))
union
select sort = 2, Birthday  from Birthdays
where MONTH (Birthdays.Birthday)<(select Month (getdate()))
   ) a
order by sort , MONTH(Birthday)


О! Ларчик-то просто открывался))))
Спасибо большое!

Добавила в сортировку еще DAY(Birthday) и стало совсем шоколадно.
29 дек 09, 15:19    [8133176]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить