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

Откуда: Магнитогорск
Сообщений: 204
есть 2 запроса
первый возвращает результаты как надо, и второй работает как положено ему
возвращают одинаковое кол-во полей
НО
когда объеденяю их с помощью UNION ALL
появляется ошибка

ORA-00979: not a GROUP BY expression

к слову сказать во втором запросе есть GROUP BY, но разве это должно влиять на UNION ALL?

кто нить подскажите!!!
Oracle 10gV2
23 июн 06, 08:18    [2804662]     Ответить | Цитировать Сообщить модератору
 Re: Union all  [new]
dmidek
Member

Откуда: Киев - Дортмунд
Сообщений: 116070
select deptno, sal
from emp
union all
select deptno, sum(sal)
from emp
group by deptno
/
DEPTNO SAL 
10 5000 
30 2850 
10 2450 
20 2975 
20 3000 
20 3000 
20 800 
30 1600 
30 1250 
30 1250 
30 1500 
20 1100 
30 950 
10 7450 
20 10875 
30 9400 

Показывайте запрос
23 июн 06, 08:26    [2804675]     Ответить | Цитировать Сообщить модератору
 Re: Union all  [new]
Nickname
Member

Откуда: Магнитогорск
Сообщений: 204
2dmidek я так тоже проверял,
но если вы настаиваете то:
SELECT *
  FROM (SELECT a.kod_chifrobject, a.name_chifrobjects, a.kod_elementbudget,
               a.name_elementbudget, a.kod_kontragent, a.name_kontragent,
               a.invoicesumma, a.paymentsumma
          FROM budget_view_all a
         WHERE a.kod_elementbudget = DECODE (0, NULL, a.kod_elementbudget, 0)
           AND a.kod_chifrobject =
                                  DECODE (NULL,
                                          NULL, a.kod_chifrobject,
                                          NULL
                                         )
           AND a.kod_kontragent = DECODE (NULL, NULL, a.kod_kontragent, NULL)
           AND a.period = DECODE (NULL, -1, a.period, NULL)) a
UNION ALL
SELECT *
  FROM (SELECT   p1, p2, p3,
                    '<a href="f?p=106:22:::::P22_KOD_ELEMENTBUDGET:'
                 || TO_CHAR (p3)
                 || '"><IMG SRC="/i/ddown.gif" width="16" height="16" border="0" align="bottom"></a>'
                 || '<a href="f?p=106:22:::::P22_KOD_ELEMENTBUDGET:'
                 || TO_CHAR (p3)
                 || '">'
                 || p4
                 || '</a>'
                 || '<a href="f?p=106:22:::::P22_KOD_ELEMENTBUDGET:'
                 || TO_CHAR (p3)
                 || '"><IMG SRC="/i/ddown.gif" width="16" height="16" border="0" 
align="bottom"></a>' p4,
                 p5, p6, SUM (b.invoicesumma), SUM (b.paymentsumma)
            FROM (SELECT NULL p1, NULL p2, a.kod p3,
                            DECODE (0,
                                    0, '',
                                    (SELECT NAME
                                       FROM sprav_elementbudget a
                                      WHERE kod = 0)
                                   )
                         || ' (ÏÎÄÃÐÓÏÏÀ '
                         || a.NAME
                         || ') ' p4,
                         NULL p5, NULL p6, (SELECT SUM (invoicesumma)
                                              FROM budget_view_all
                                             WHERE kod_elementbudget = 0) p7,
                         (SELECT SUM (paymentsumma)
                            FROM budget_view_all
                           WHERE kod_elementbudget = 0) p8
                    FROM sprav_elementbudget a
                   WHERE parent_kod = 0) a,
                 budget_view_all_1 b
           WHERE b.kod_elementbudget = a.p3
             AND b.kod_chifrobject =
                                  DECODE (NULL,
                                          NULL, b.kod_chifrobject,
                                          NULL
                                         )
             AND b.kod_kontragent =
                                   DECODE (NULL,
                                           NULL, b.kod_kontragent,
                                           NULL
                                          )
             AND b.period = DECODE (NULL, -1, b.period, NULL)
        GROUP BY p1, p2, p3, p4, p5, p6) b

не обращайте внимание на странные DECODE там были связные переменные просто заглушил их таким образом
23 июн 06, 08:32    [2804682]     Ответить | Цитировать Сообщить модератору
 Re: Union all  [new]
dmidek
Member

Откуда: Киев - Дортмунд
Сообщений: 116070
(c) "Что - то здесь не так"

                   '<a href="f?p=106:22:::::P22_KOD_ELEMENTBUDGET:'
                 || TO_CHAR (p3)
                 || '"><IMG SRC="/i/ddown.gif" width="16" height="16" border="0" align="bottom"></a>'
                 || '<a href="f?p=106:22:::::P22_KOD_ELEMENTBUDGET:'
                 || TO_CHAR (p3)
                 || '">'
                 || p4
                 || '</a>'
                 || '<a href="f?p=106:22:::::P22_KOD_ELEMENTBUDGET:'
                 || TO_CHAR (p3)
                 || '"><IMG SRC="/i/ddown.gif" width="16" height="16" border="0" 
   align="bottom"></a>' p4,
23 июн 06, 08:40    [2804697]     Ответить | Цитировать Сообщить модератору
 Re: Union all  [new]
Владимор Конев
Member

Откуда:
Сообщений: 3451
Nickname
2dmidek я так тоже проверял,
но если вы настаиваете то:
...
не обращайте внимание на странные DECODE там были связные переменные просто заглушил их таким образом

перепиши запрос вот в таком виде:
SELECT *
  FROM (SELECT a.kod_chifrobject, a.name_chifrobjects, a.kod_elementbudget,
               a.name_elementbudget, a.kod_kontragent, a.name_kontragent,
               a.invoicesumma, a.paymentsumma
          FROM budget_view_all a
         WHERE a.kod_elementbudget = DECODE (0, NULL, a.kod_elementbudget, 0)
           AND rownum >= 1
           AND a.kod_chifrobject =
                                  DECODE (NULL,
                                          NULL, a.kod_chifrobject,
                                          NULL
                                         )
           AND a.kod_kontragent = DECODE (NULL, NULL, a.kod_kontragent, NULL)
           AND a.period = DECODE (NULL, -1, a.period, NULL)) a
UNION ALL
SELECT *
  FROM (SELECT   p1, p2, p3,
                    '<a href="f?p=106:22:::::P22_KOD_ELEMENTBUDGET:'
                 || TO_CHAR (p3)
                 || '"><IMG SRC="/i/ddown.gif" width="16" height="16" border="0" align="bottom"></a>'
                 || '<a href="f?p=106:22:::::P22_KOD_ELEMENTBUDGET:'
                 || TO_CHAR (p3)
                 || '">'
                 || p4
                 || '</a>'
                 || '<a href="f?p=106:22:::::P22_KOD_ELEMENTBUDGET:'
                 || TO_CHAR (p3)
                 || '"><IMG SRC="/i/ddown.gif" width="16" height="16" border="0" 
align="bottom"></a>' p4,
                 p5, p6, SUM (b.invoicesumma), SUM (b.paymentsumma)
            FROM (SELECT NULL p1, NULL p2, a.kod p3,
                            DECODE (0,
                                    0, '',
                                    (SELECT NAME
                                       FROM sprav_elementbudget a
                                      WHERE kod = 0)
                                   )
                         || ' (ÏÎÄÃÐÓÏÏÀ '
                         || a.NAME
                         || ') ' p4,
                         NULL p5, NULL p6, (SELECT SUM (invoicesumma)
                                              FROM budget_view_all
                                             WHERE kod_elementbudget = 0) p7,
                         (SELECT SUM (paymentsumma)
                            FROM budget_view_all
                           WHERE kod_elementbudget = 0) p8
                    FROM sprav_elementbudget a
                   WHERE parent_kod = 0
                      AND rownum >= 1) a,
                 budget_view_all_1 b
           WHERE b.kod_elementbudget = a.p3
             AND rownum >= 1
             AND b.kod_chifrobject =
                                  DECODE (NULL,
                                          NULL, b.kod_chifrobject,
                                          NULL
                                         )
             AND b.kod_kontragent =
                                   DECODE (NULL,
                                           NULL, b.kod_kontragent,
                                           NULL
                                          )
             AND b.period = DECODE (NULL, -1, b.period, NULL)
        GROUP BY p1, p2, p3, p4, p5, p6) b

и тогда, может быть, будет тебе счастье... :)
23 июн 06, 08:46    [2804707]     Ответить | Цитировать Сообщить модератору
 Re: Union all  [new]
dmidek
Member

Откуда: Киев - Дортмунд
Сообщений: 116070
dmidek
(c) "Что - то здесь не так"

                   '<a href="f?p=106:22:::::P22_KOD_ELEMENTBUDGET:'
                 || TO_CHAR (p3)
                 || '"><IMG SRC="/i/ddown.gif" width="16" height="16" border="0" align="bottom"></a>'
                 || '<a href="f?p=106:22:::::P22_KOD_ELEMENTBUDGET:'
                 || TO_CHAR (p3)
                 || '">'
                 || p4
                 || '</a>'
                 || '<a href="f?p=106:22:::::P22_KOD_ELEMENTBUDGET:'
                 || TO_CHAR (p3)
                 || '"><IMG SRC="/i/ddown.gif" width="16" height="16" border="0" 
   align="bottom"></a>' p4,

Отбой :), замечание снимается ...
23 июн 06, 08:51    [2804714]     Ответить | Цитировать Сообщить модератору
 Re: Union all  [new]
Владимор Конев
Member

Откуда:
Сообщений: 3451
dmidek
Отбой :), замечание снимается ...
Опять "ещё не проснулся" ;)
23 июн 06, 08:56    [2804727]     Ответить | Цитировать Сообщить модератору
 Re: Union all  [new]
dmidek
Member

Откуда: Киев - Дортмунд
Сообщений: 116070
Владимор Конев
dmidek
Отбой :), замечание снимается ...
Опять "ещё не проснулся" ;)

Да, и причем настолько, что совершенно не понял твоего ответа.
Что за rownum >= 1 ?
23 июн 06, 09:03    [2804739]     Ответить | Цитировать Сообщить модератору
 Re: Union all  [new]
Nickname
Member

Откуда: Магнитогорск
Сообщений: 204
2 Владимор Конев
спасибо все заработало, только теперь хотелось бы объяснений!!!
а то что то похоже на шаманский бубен (rownum>=1)
23 июн 06, 09:24    [2804795]     Ответить | Цитировать Сообщить модератору
 Re: Union all  [new]
Владимор Конев
Member

Откуда:
Сообщений: 3451
dmidek
Да, и причем настолько, что совершенно не понял твоего ответа.
Что за rownum >= 1 ?
Dmidek, ты меня иногда удивляешь :)
Мы же с тобой недавно обсуждали нечно похожее

Nickname
2 Владимор Конев
спасибо все заработало, только теперь хотелось бы объяснений!!!
а то что то похоже на шаманский бубен (rownum>=1)
Тебе тоже не мешает пройтись по ссылке.
Но на словах могу сказать следующее - оракл попытался "слить" встроеные представления (подзапросы во вразе WHERE) до базовых таблиц. Попытка оказалась неудачной. В результате получилось такое сообщение об ошибке.
Лечится принудительным запретом на слияние представлений.
А запретить это можно :
1) Хинтом /*+ NO_MERGE*/, но к сожалению оно не всегда работает (к примеру, может не работать с complex view):(
2) "Материализовать представление" - это как раз и делается добавлением в подзапрос условия по ROWNUM. К примеру, STAX любит писать вот так: and rownum <= 99999999999. Лично я предпочитаю писать так: and rownum >= 1 :). Работает безотказно (по крайней мере меня оно ещё ни раз не подводило :))
3) Установив значение параметра "_complex_view_merging" в false (работает не во всех версиях Oracle)
23 июн 06, 09:58    [2804916]     Ответить | Цитировать Сообщить модератору
 Re: Union all  [new]
dmidek
Member

Откуда: Киев - Дортмунд
Сообщений: 116070
Владимор Конев
dmidek
Да, и причем настолько, что совершенно не понял твоего ответа.
Что за rownum >= 1 ?
Dmidek, ты меня иногда удивляешь :)
Мы же с тобой недавно обсуждали нечно похожее

Да, я догадывался , но rownum>=1 сбило с толку.
Все, пошел пить кофе
23 июн 06, 10:03    [2804943]     Ответить | Цитировать Сообщить модератору
 Re: Union all  [new]
Nickname
Member

Откуда: Магнитогорск
Сообщений: 204
Владимор Конев
dmidek
Да, и причем настолько, что совершенно не понял твоего ответа.
Что за rownum >= 1 ?
Dmidek, ты меня иногда удивляешь :)
Мы же с тобой недавно обсуждали нечно похожее

Nickname
2 Владимор Конев
спасибо все заработало, только теперь хотелось бы объяснений!!!
а то что то похоже на шаманский бубен (rownum>=1)
Тебе тоже не мешает пройтись по ссылке.
Но на словах могу сказать следующее - оракл попытался "слить" встроеные представления (подзапросы во вразе WHERE) до базовых таблиц. Попытка оказалась неудачной. В результате получилось такое сообщение об ошибке.
Лечится принудительным запретом на слияние представлений.
А запретить это можно :
1) Хинтом /*+ NO_MERGE*/, но к сожалению оно не всегда работает (к примеру, может не работать с complex view):(
2) "Материализовать представление" - это как раз и делается добавлением в подзапрос условия по ROWNUM. К примеру, STAX любит писать вот так: and rownum <= 99999999999. Лично я предпочитаю писать так: and rownum >= 1 :). Работает безотказно (по крайней мере меня оно ещё ни раз не подводило :))
3) Установив значение параметра "_complex_view_merging" в false (работает не во всех версиях Oracle)


спсб, нечто похожее я и подразумевал, только словами выразить не мог :-)
будем всегда помнить про это!
23 июн 06, 10:08    [2804962]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить