Невозможно добавить выражение подзапроса в Group By — Oracle

#sql #oracle

#sql #Oracle

Вопрос:

У меня есть запрос, как показано ниже,

 select a,b,c, (select h from table 1 where field = a and field2 = b) as alias_column, d
from table 
group by a,b,c, (select h from table 1 where field = a and field2 = b) , d
  

Я получаю сообщение об ошибке типа,

 ORA-22818: subquery expressions not allowed here
22818. 00000 -  "subquery expressions not allowed here"
*Cause:    An attempt was made to use a subquery expression where these
           are not supported.
*Action:   Rewrite the statement without the subquery expression.
Error at Line: 84 Column: 2
  

Я думаю, это связано с тем, что where clause в подзапросе, который добавляется в group by

Смотрите подзапрос, (select * from table 1 where field = a and field2 = b) has a и b поля из родительской таблицы.

Пожалуйста, помогите.

Комментарии:

1. Попробуйте заменить подзапрос в group by на alias_column

2. Это не работает .. Когда я гуглю, он говорит, что я должен поместить весь подзапрос в group by

3. В подзапросе объединено несколько таблиц. Я не упоминал об этом в вопросах.

4. Не могли бы вы настроить sqlfiddle.com чтобы отладить вашу проблему?

5. вы группируетесь, используя подзапрос? это невозможно сделать .. буквально группировка некоторых данных — это то, что у вас есть из предложений FROM и WHERE ..

Ответ №1:

Если подзапрос ( select * from table 1 where field = a and field2 = b ) возвращает только одно значение, это должно сработать:

 select * from
(select a,b,c, (select * from table 1 where field = a and field2 = b) as alias_column, d
from table) 
group by a,b,c, alias_column , d
  

Но если подзапрос ( select * from table 1 where field = a and field2 = b )
не возвращает только одно значение, вы получите сообщение об ошибке ниже:

 ORA-01427: single-row subquery returns more than one row
01427. 00000 -  "single-row subquery returns more than one row"
  

Комментарии:

1. @Sahal хорошо, вы пробовали с запросом, который я предложил?

2. Этот ответ не имеет отношения к этому вопросу.

Ответ №2:

Почему вы выполняете group by, когда не задействованы агрегатные функции?

Используйте DISTINCT вместо этого, т.е.

 SELECT DISTINCT a,b,c,
       (select * from table 1
        where field = a and field2 = b) as alias_column, d
from table