Переключение на Главную Страницу Страницы: [1] 2  ОтправитьПечать
Горячая тема (более 10 ответов) Ошибка ORDER BY ... a UNION operator. (число прочтений - 8337 )
ASV
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 11
Зарегистрирован: 18. Июня 2006
Пол: Мужской
Ошибка ORDER BY ... a UNION operator.
21. Июня 2006 :: 06:56
Печать  
     ТекстЗапроса =
     "SELECT    
     |      Субконто1,
     |      SUM(Сумма1) Сумма3,
     |      SUM(Сумма2) Сумма4,
     |      SUM(Колич)      Количество
     |FROM       (
     |                  SELECT    
     |                        DTSC0      Субконто1,
     |                        SUM_      Сумма1,
     |                        0            Сумма2,
     |                        AMOUNT      Колич
     |                  FROM
     |                        _1SENTRY Проводки
     |                  HAVING      
     |                        (Проводки.DATE_TIME_DOCID BETWEEN :НачДата AND :КонДата~) AND (Проводки.ACCDTID = :Счет90)
     |                  
     |                  UNION ALL
    |
     |                  SELECT    
     |                        DTSC0      Субконто1,
     |                        0            Сумма1,
     |                        SUM_      Сумма2,
     |                        AMOUNT      Колич
     |                  FROM
     |                        _1SENTRY Проводки
     |                  HAVING      
     |                        (Проводки.DATE_TIME_DOCID BETWEEN :НачДата AND :КонДата~) AND (Проводки.ACCKTID = :Счет90_1)
     |                  
     |                  ) TMP
     |GROUP BY
     |            Субконто1
     |ORDER BY
     |            Субконто1 ASC
     |";

ругается
State 42000, native 104, message [Microsoft][ODBC SQL Server Driver][SQL Server]ORDER BY items must appear in the select list if the statement contains a UNION operator.

что не так?
  
Наверх
ICQ  
IP записан
 
S.W.A.T.
Junior Member
**
Отсутствует



Сообщений: 42
Местоположение: Санкт-Петербург
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Ошибка ORDER BY ... a UNION operator.
Ответ #1 - 21. Июня 2006 :: 06:59
Печать  
С HAVING не очепятка случайно? Вообще-то WHERE должно быть Подмигивание
  
Наверх
ICQ  
IP записан
 
ASV
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 11
Зарегистрирован: 18. Июня 2006
Пол: Мужской
Re: Ошибка ORDER BY ... a UNION operator.
Ответ #2 - 21. Июня 2006 :: 08:06
Печать  
HAVING написал мастер запросов Enterprise Manager'a
если убрать второй SELECT и UNION работает
  
Наверх
ICQ  
IP записан
 
S.W.A.T.
Junior Member
**
Отсутствует



Сообщений: 42
Местоположение: Санкт-Петербург
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Ошибка ORDER BY ... a UNION operator.
Ответ #3 - 21. Июня 2006 :: 08:28
Печать  
ASV писал(а) 21. Июня 2006 :: 08:06:
HAVING написал мастер запросов Enterprise Manager'a
если убрать второй SELECT и UNION работает

А если вместо HAVING, WHERE написать? Ошибка остается?
  
Наверх
ICQ  
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3050
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Ошибка ORDER BY ... a UNION operator.
Ответ #4 - 21. Июня 2006 :: 08:43
Печать  
HAVING нужно заменить на WHERE
  

1&&2&&3
Наверх
 
IP записан
 
S.W.A.T.
Junior Member
**
Отсутствует



Сообщений: 42
Местоположение: Санкт-Петербург
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Ошибка ORDER BY ... a UNION operator.
Ответ #5 - 21. Июня 2006 :: 08:46
Печать  
trad писал(а) 21. Июня 2006 :: 08:43:
HAVING нужно заменить на WHERE

Вообще говоря:

Specifies a search condition for a group or an aggregate. HAVING is usually used with the GROUP BY clause. When GROUP BY is not used, HAVING behaves like a WHERE clause.

BOL


  
Наверх
ICQ  
IP записан
 
ASV
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 11
Зарегистрирован: 18. Июня 2006
Пол: Мужской
Re: Ошибка ORDER BY ... a UNION operator.
Ответ #6 - 21. Июня 2006 :: 08:52
Печать  
завтра проверю
  
Наверх
ICQ  
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Ошибка ORDER BY ... a UNION operator.
Ответ #7 - 21. Июня 2006 :: 09:05
Печать  
Будь проще:  Улыбка
Код
Выбрать все
SELECT      
    Проводки.DTSC0 Субконто1,
    Sum(CASE WHEN Проводки.ACCDTID = :Счет90 THEN SUM_ ELSE 0 END) Сумма3,
    Sum(CASE WHEN Проводки.ACCKTID = :Счет90_1 THEN SUM_ ELSE 0 END) Сумма4,
    Sum(Проводки.AMOUNT) Количество
FROM
    _1SENTRY Проводки (nolock)
WHERE      
    (Проводки.DATE_TIME_DOCID BETWEEN :НачДата AND :КонДата~)
    AND (Проводки.ACCDTID = :Счет90 OR Проводки.ACCKTID = :Счет90_1)
GROUP BY  
    Проводки.DTSC0
ORDER BY  
    Проводки.DTSC0  

  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3050
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Ошибка ORDER BY ... a UNION operator.
Ответ #8 - 21. Июня 2006 :: 09:45
Печать  
S.W.A.T. писал(а) 21. Июня 2006 :: 08:46:
Specifies a search condition for a group or an aggregate. HAVING is usually used with the GROUP BY clause. When GROUP BY is not used, HAVING behaves like a WHERE clause.

Цитата:
Specifies a search condition for a group or an aggregate.

Отсюда второе предложение в контексте первого можно интерпретировать так: если нет группировки, то в условии можно использовать только агрегаты
  

1&&2&&3
Наверх
 
IP записан
 
S.W.A.T.
Junior Member
**
Отсутствует



Сообщений: 42
Местоположение: Санкт-Петербург
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Ошибка ORDER BY ... a UNION operator.
Ответ #9 - 21. Июня 2006 :: 09:47
Печать  
trad писал(а) 21. Июня 2006 :: 09:45:
S.W.A.T. писал(а) 21. Июня 2006 :: 08:46:
Specifies a search condition for a group or an aggregate. HAVING is usually used with the GROUP BY clause. When GROUP BY is not used, HAVING behaves like a WHERE clause.

Изменено:
Specifies a search condition for a group or an aggregate.

Отсюда второе предложение в контексте первого можно интерпретировать так: если нет группировки, то в условии можно использовать только агрегаты

Но опять же HAVING is usually used with the GROUP BY clause - обычно, не эквивалентно обязательно Подмигивание
  
Наверх
ICQ  
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3050
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Ошибка ORDER BY ... a UNION operator.
Ответ #10 - 21. Июня 2006 :: 09:47
Печать  
bol тоже люди писали
  

1&&2&&3
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3050
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Ошибка ORDER BY ... a UNION operator.
Ответ #11 - 21. Июня 2006 :: 09:52
Печать  
"behaves like" можно перевести как "ведет себя подобно", но не "в точности как"

давай не будем заниматься игрой слов.
практика лучший способ узнать истину. я свое утверждение проверил прежде чем запостить.
а вообще berezdetsky как всегда прав
  

1&&2&&3
Наверх
 
IP записан
 
ASV
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 11
Зарегистрирован: 18. Июня 2006
Пол: Мужской
Re: Ошибка ORDER BY ... a UNION operator.
Ответ #12 - 21. Июня 2006 :: 22:06
Печать  
Вариант с WHERE ошибку не выдает, работает, но цифры не правильные выдает. Если отсавить только SELECT со Счет90, результат правильный
  
Наверх
ICQ  
IP записан
 
ASV
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 11
Зарегистрирован: 18. Июня 2006
Пол: Мужской
Re: Ошибка ORDER BY ... a UNION operator.
Ответ #13 - 21. Июня 2006 :: 22:17
Печать  
вариант berezdetsky работает, и правильно работает.
Всем спасибо
  
Наверх
ICQ  
IP записан
 
serjeant
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 5
Зарегистрирован: 12. Сентября 2008
Re: Ошибка ORDER BY ... a UNION operator.
Ответ #14 - 12. Сентября 2008 :: 11:29
Печать  
Ребята, та же проблема с :"
ORDER BY items must appear in the select list if the statement contains a UNION operator"
Текст запроса:
SELECT
  ЖР.ids as [Сотрудник $Справочник.Сотрудники],
  $ПоследнееЗначение.Сотрудники.ОсновноеНазначение(ЖР.ids,:КонДата~~) AS [Назн $Справочник.Назначения]   
FROM
  $ЖурналРасчетов.Зарплата AS ЖР
WHERE (ЖР.period>=:НачДатаГод) AND (ЖР.period<=:Пер)
and (ЖР.dateb>=:НачДата) AND (ЖР.datee<=:КонДата) AND (ЖР.ids=:Сот)
Union
SELECT   
  ЖРо.ids as [Сотрудник $Справочник.Сотрудники],
  $ПоследнееЗначение.Сотрудники.ОсновноеНазначение(ЖРо.ids,:КонДата~~) AS [Назн $Справочник.Назначения]   
FROM
  $ЖурналРасчетов.ОтчисленияВФонды AS ЖРо
WHERE (ЖРо.period>=:НачДатаГод) AND (ЖРо.period<=:Пер)
and (ЖРо.dateb>=:НачДата) AND (ЖРо.datee<=:КонДата) AND (ЖРо.ids=:Сот)

Помогите, плиз. не знаю как его правильно написать чтоб работал
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 
ОтправитьПечать