не выражение GROUP BY - PullRequest
       17

не выражение GROUP BY

0 голосов
/ 12 января 2012

Я выбрал следующее:

Select attribut1, dateattribut, attribut3, 
       attribut4, attribut15, town_CODE, count(*)     
from (
select attribut1, dateattribut, attribut3, attribut4, attribut15, (CASE 
  WHEN  TO_CHAR(dateattribut,'YYYY')  = '2005'  THEN 
   CASE town_CODE 
    WHEN '039' THEN  '078' WHEN '050' THEN  '093' 
    WHEN '091' THEN  '008' WHEN '102' THEN  '093' 
   ELSE town_CODE end 
  ELSE town_CODE end) as town_CODE
from towntable) GROUP BY attribut1, dateattribut, 
                        attribut3, attribut4, 
                        attribut15, town_CODE
having count(*) > 1;

, когда я выполняю этот запрос на нашем сервере, он работает нормально.но на сервере моего клиента я получаю ошибку оракула ORA-00979: not a GROUP BY expression.

Насколько я узнал, что у меня проблемы с кейсами и псевдонимами.без этого это работает.

какие-либо предложения?

*, что я пытаюсь сделать с этим утверждением, чтобы получить все двойные записи.с помощью внутреннего запроса я заменяю все старые коды на новые, а затем хочу сгруппировать их, чтобы увидеть, существуют ли они многократно.Некоторые клиенты использовали старые коды, и теперь возможно, что они имеют один и тот же город 2 раза.

edit

SELECT * FROM product_component_version

, и я получаюна обоих:

Product                                     Version         Status

NLSRTL                                      10.2.0.4.0      Production
Oracle Database 10g Enterprise Edition      10.2.0.4.0      64bi
PL/SQL                                      10.2.0.4.0      Production
TNS for 64-bit Windows:                     10.2.0.4.0      Production

edit2

мой тест показал, что ему не нравится звонить с псевдонимом.есть ли настройка, что псевдоним не распознается?

Ответы [ 4 ]

3 голосов
/ 12 января 2012

", когда я выполняю этот запрос на нашем сервере, он работает нормально. Но на сервер моего клиента я получаю ошибку оракула ORA-00979: not a GROUP BY expression. "

Это означает одну из двух вещей:

  1. Ваш сервер отличается от сервера вашего клиента, и эта разница предотвращает ошибку; например, ваш сервер более поздней версии или имеет другой уровень исправлений.
  2. На самом деле вы не используете тот же код в базе данных вашего клиента, который вы запускаете самостоятельно.

Последнее кажется вполне вероятным, поскольку код, который вы разместили здесь , очевидно, не тот код, который вы запускаете на своем собственном сервере. Как уже отмечали другие, он содержит несколько синтаксических ошибок, хотя ни один из них фактически не будет отбрасывать ORA-00979.

Эта ошибка означает, что в проекции есть неагрегированный столбец, которого нет в предложении GROUP BY, или, возможно, в предложении GROUP BY есть что-то, чего нет в проекции.

1 голос
/ 12 января 2012

Вам не хватает скобки после имени таблицы и запятой после attribut15.Попробуйте это:

Select attribut1, dateattribut, attribut3, 
       attribut4, attribut15, town_CODE, count(*)     
from (
select attribut1, dateattribut, attribut3, attribut4, attribut15, (CASE 
  WHEN  TO_CHAR(dateattribut,'YYYY')  = '2005'  THEN 
   CASE town_CODE 
    WHEN '039' THEN  '078' WHEN '050' THEN  '093' 
    WHEN '091' THEN  '008' WHEN '102' THEN  '093' 
   ELSE town_CODE end 
  ELSE town_CODE end) as town_CODE
from towntable) GROUP BY attribut1, dateattribut, 
                        attribut3, attribut4, 
                        attribut15, town_CODE
having count(*) > 1;
0 голосов
/ 16 января 2012

Мое решение состоит в том, чтобы использовать View.

Inner Select as View и затем внешний select как обычно, и он работает нормально.

я обнаружил, что ему не нравится town_CODEво внешнем выборе.

Select attribut1, dateattribut, attribut3,
       attribut4, attribut15, town_CODE, count(*)     
from  v_towntable
GROUP BY attribut1, dateattribut, attribut3, 
         attribut4, attribut15, town_CODE
having count(*) > 1
0 голосов
/ 12 января 2012

Кажется, что в исходном запросе есть одна или две синтаксические ошибки - должно работать следующее:

Select attribut1, 
       dateattribut, 
       attribut3, 
       attribut4, 
       attribut15, 
       town_CODE, 
       count(*)     
from (select attribut1, 
             dateattribut, 
             attribut3, 
             attribut4, 
             attribut15,
             CASE WHEN TO_CHAR(dateattribut,'YYYY') = '2005' THEN 
                  CASE town_CODE 
                       WHEN '039' THEN  '078' 
                       WHEN '050' THEN  '093' 
                       WHEN '091' THEN  '008' 
                       WHEN '102' THEN  '093' 
                       ELSE town_CODE
                  end 
                  ELSE town_CODE
             end as town_CODE
      from towntable) v 
GROUP BY attribut1, 
         dateattribut, 
         attribut3, 
         attribut4, 
         attribut15, 
         town_CODE
having count(*) > 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...