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

Откуда:
Сообщений: 324
Доброго времени суток.
Вопрос простой, вроде бы, но не могу разобраться...
Вот запрос:

(select rest, ddatedoc
from RESTANL where (ddatedoc<=@date) and
accountid=(select top 1 procent.accountid from procent,contract where
contract.ctr_auto=procent.ctr_auto and contract.contrnum=@ctrnum order by procent.date desc)

UNION

select rest, ddatedoc
from RESTANLAR where (ddatedoc<=@date) and
accountid=(select top 1 procent.accountid from procent,contract where
contract.ctr_auto=procent.ctr_auto and contract.contrnum=@ctrnum order by procent.date desc))

order by ddatedoc,rest

т.е. тянется 2 поля из двух разных таблиц, объединяются unoin-ом, затем группируется. Сервер на это пишет:
ORDER BY items must appear in the select list if the statement contains a UNION operator.

Что конкретно ему не нравится-то? Ордер мне надо сделать по итоговой выборке...
20 мар 06, 17:25    [2468495]     Ответить | Цитировать Сообщить модератору
 Re: SQL-запрос  [new]
vooo
Member

Откуда:
Сообщений: 1316
правильно order by должен быть один - в конце union
order by ddatedoc,rest

остальные лишние
20 мар 06, 17:31    [2468520]     Ответить | Цитировать Сообщить модератору
 Re: SQL-запрос  [new]
Glory
Member

Откуда:
Сообщений: 104760
затем группируется.
Что то не видно никакой группировки
20 мар 06, 17:32    [2468529]     Ответить | Цитировать Сообщить модератору
 Re: SQL-запрос  [new]
vooo
Member

Откуда:
Сообщений: 1316
сорри top просмотрел
20 мар 06, 17:33    [2468544]     Ответить | Цитировать Сообщить модератору
 Re: SQL-запрос  [new]
RAndrey
Member

Откуда:
Сообщений: 324
автор
правильно order by должен быть один - в конце union
order by ddatedoc,rest

остальные лишние


а эти order-ы в подзапросах, возвращающих 1 значение

автор
затем группируется.
Что то не видно никакой группировки
автор

ну, сортируется :)
20 мар 06, 17:37    [2468565]     Ответить | Цитировать Сообщить модератору
 Re: SQL-запрос  [new]
Glory
Member

Откуда:
Сообщений: 104760
RAndrey
автор
затем группируется.
Что то не видно никакой группировки
автор

ну, сортируется :)

Ну может тогда приведете текст запроса полностью ?
20 мар 06, 17:40    [2468591]     Ответить | Цитировать Сообщить модератору
 Re: SQL-запрос  [new]
RAndrey
Member

Откуда:
Сообщений: 324
Пишет, значит, что в списке полей в order by должны присутствовать только поля, которые выбираюцца из таблиц. Но вроде так оно и есть: select ddatedoc,rest и order тоже по ddatedoc, rest. Может, он имена таблиц еще добавляет?
20 мар 06, 17:41    [2468592]     Ответить | Цитировать Сообщить модератору
 Re: SQL-запрос  [new]
vooo
Member

Откуда:
Сообщений: 1316
а если так:
select rest, ddatedoc from (subquery1)  t
union all
select rest, ddatedoc from (subquery2) t1
order by ddatedoc,rest 

где subquery1
[/SRC]
(select rest, ddatedoc
from RESTANL where (ddatedoc<=@date) and
accountid=(select top 1 procent.accountid from procent,contract where
contract.ctr_auto=procent.ctr_auto and contract.contrnum=@ctrnum order by procent.date desc)
[/SRC]
ну и subquery2 - по аналогии
20 мар 06, 17:42    [2468607]     Ответить | Цитировать Сообщить модератору
 Re: SQL-запрос  [new]
RENaissance
Member

Откуда: Муром->Москва
Сообщений: 10895

А так???
select rest, ddatedoc
from RESTANL
where
  (ddatedoc <= @date) and
  accountid = (select top 1 procent.accountid
               from procent, contract
               where
                 contract.ctr_auto = procent.ctr_auto and
                 contract.contrnum = @ctrnum
               order by procent.date desc)
UNION
select rest, ddatedoc
from RESTANLAR
where
  (ddatedoc <= @date) and
  accountid =(select top 1 procent.accountid
              from procent, contract
              where
                contract.ctr_auto = procent.ctr_auto and
                contract.contrnum = @ctrnum
              order by procent.date desc)
order by ddatedoc, rest



Posted via ActualForum NNTP Server 1.3

20 мар 06, 17:43    [2468617]     Ответить | Цитировать Сообщить модератору
 Re: SQL-запрос  [new]
RAndrey
Member

Откуда:
Сообщений: 324
Glory
RAndrey
автор
затем группируется.
Что то не видно никакой группировки
автор

ну, сортируется :)

Ну может тогда приведете текст запроса полностью ?


Так я, собственно, и привел... Запрос из Query Analyzera, без изменений. Выше только присваиваются значения @date и @ctrnum
20 мар 06, 17:43    [2468618]     Ответить | Цитировать Сообщить модератору
 Re: SQL-запрос  [new]
Turkhan
Member

Откуда:
Сообщений: 18
было такое. order by, естесьно, не работает без select. пробуй так:

select ddatedoc, rest from

({здесь работающий запрос с union, круглые скобки вокруг - обязательно})

order by ddatedoc, rest
20 мар 06, 17:43    [2468621]     Ответить | Цитировать Сообщить модератору
 Re: SQL-запрос  [new]
Glory
Member

Откуда:
Сообщений: 104760
RAndrey
Glory
RAndrey
автор
затем группируется.
Что то не видно никакой группировки
автор

ну, сортируется :)

Ну может тогда приведете текст запроса полностью ?


Так я, собственно, и привел... Запрос из Query Analyzera, без изменений. Выше только присваиваются значения @date и @ctrnum


Прокомментрируйте тогда ошибки _компиляции_
declare @date datetime
declare @ctrnum int

(select rest, ddatedoc
from RESTANL where (ddatedoc<=@date) and
accountid=(select top 1 procent.accountid from procent,contract where
contract.ctr_auto=procent.ctr_auto and contract.contrnum=@ctrnum order by procent.date desc)

UNION

select rest, ddatedoc
from RESTANLAR where (ddatedoc<=@date) and
accountid=(select top 1 procent.accountid from procent,contract where
contract.ctr_auto=procent.ctr_auto and contract.contrnum=@ctrnum order by procent.date desc))

order by ddatedoc,rest 

Server: Msg 156, Level 15, State 1, Line 4
Incorrect syntax near the keyword 'select'.
Server: Msg 137, Level 15, State 1, Line 7
Must declare the variable '@ctrnum'.
Server: Msg 137, Level 15, State 1, Line 14
Must declare the variable '@ctrnum'.
20 мар 06, 17:47    [2468649]     Ответить | Цитировать Сообщить модератору
 Re: SQL-запрос  [new]
Le Peace
Member

Откуда: Москва
Сообщений: 8969
Если скобки внешние убрать, то все компилится.
20 мар 06, 17:58    [2468721]     Ответить | Цитировать Сообщить модератору
 Re: SQL-запрос  [new]
Glory
Member

Откуда:
Сообщений: 104760
Le Peace
Если скобки внешние убрать, то все компилится.

Автор утвержадает, что у него компилируется именно в таком виде
20 мар 06, 17:59    [2468734]     Ответить | Цитировать Сообщить модератору
 Re: SQL-запрос  [new]
RAndrey
Member

Откуда:
Сообщений: 324
Glory

Server: Msg 156, Level 15, State 1, Line 4
Incorrect syntax near the keyword 'select'.
Server: Msg 137, Level 15, State 1, Line 7
Must declare the variable '@ctrnum'.
Server: Msg 137, Level 15, State 1, Line 14
Must declare the variable '@ctrnum'.


А у меня такого нету. Тем более в вашем примере задеклорированы обе переменные, таких сообщений быть в принципе не должно.

Сейчас убрал подзапрос (select top 1 и т.д.), поставил просто константу - заработало. Но я-то хочу все одним запросом делать.
20 мар 06, 18:00    [2468745]     Ответить | Цитировать Сообщить модератору
 Re: SQL-запрос  [new]
Glory
Member

Откуда:
Сообщений: 104760
RAndrey
Glory

Server: Msg 156, Level 15, State 1, Line 4
Incorrect syntax near the keyword 'select'.
Server: Msg 137, Level 15, State 1, Line 7
Must declare the variable '@ctrnum'.
Server: Msg 137, Level 15, State 1, Line 14
Must declare the variable '@ctrnum'.


А у меня такого нету. Тем более в вашем примере задеклорированы обе переменные, таких сообщений быть в принципе не должно.


Тем не менее они есть
20 мар 06, 18:01    [2468755]     Ответить | Цитировать Сообщить модератору
 Re: SQL-запрос  [new]
RAndrey
Member

Откуда:
Сообщений: 324
RAndrey
Glory

Server: Msg 156, Level 15, State 1, Line 4
Incorrect syntax near the keyword 'select'.
Server: Msg 137, Level 15, State 1, Line 7
Must declare the variable '@ctrnum'.
Server: Msg 137, Level 15, State 1, Line 14
Must declare the variable '@ctrnum'.


А у меня такого нету. Тем более в вашем примере задеклорированы обе переменные, таких сообщений быть в принципе не должно.


Прошу прощения, если Ваш запрос скопировать - тогда да, именно эти сообщения и появляются. Но у меня еще значения присваиваются переменным - т.е.
set @date='2006/03/16'
set @ctrnum='3346'
20 мар 06, 18:05    [2468776]     Ответить | Цитировать Сообщить модератору
 Re: SQL-запрос  [new]
ЕщеОдинЧайник
Member

Откуда:
Сообщений: 3
Turkhan уже ответил Вам ранее

SELECT rest, ddatedoc
FROM
(
/* Текст Вашего запроса */
select rest, ddatedoc
from RESTANL
where
(ddatedoc <= @date) and
accountid = (select top 1 procent.accountid
from procent, contract
where
contract.ctr_auto = procent.ctr_auto and
contract.contrnum = @ctrnum
order by procent.date desc)
UNION
select rest, ddatedoc
from RESTANLAR
where
(ddatedoc <= @date) and
accountid =(select top 1 procent.accountid
from procent, contract
where
contract.ctr_auto = procent.ctr_auto and
contract.contrnum = @ctrnum
order by procent.date desc)

/* !!!! */
) AS a

order by ddatedoc, rest
20 мар 06, 18:17    [2468828]     Ответить | Цитировать Сообщить модератору
 Re: SQL-запрос  [new]
RAndrey
Member

Откуда:
Сообщений: 324
ЕщеОдинЧайник
Turkhan уже ответил Вам ранее

SELECT rest, ddatedoc
FROM
(
/* Текст Вашего запроса */
select rest, ddatedoc ...


Ну надо же, работает. Спасибо!
Для меня, откровением явилось то, что можно делать select из другого select-a. Круто.
20 мар 06, 18:25    [2468862]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить