Неверный идентификатор при указании столбцов во время разворота - ORA-00904 - PullRequest
0 голосов
/ 22 января 2020

При попытке создать сводную область я получаю ошибку ORA-00904 invalid identifier в следующем запросе.

Определение таблицы

create table table1(id int, name varchar2(20), col1 int);
insert into table1 values(1, 'Alex', 99);
insert into table1 values(2, 'Alex', 98);
insert into table1 values(3, 'James', 97);
insert into table1 values(4, 'Eric', 99);
insert into table1 values(5, 'Stan', 99);

Запрос ошибки

select name, col1
from table1
pivot (count(name) for col1 in (99, 98, 97))
;

Тем не менее, следующие запросы будут работать

Рабочий запрос 1

select *
from table1
pivot (count(name) for col1 in (99, 98, 97)) p
;

Рабочий запрос 2

with cte as (
  select name, col1
  from table1
)
select *
from cte
pivot (count(name) for col1 in (99, 98, 97))
;

Я предпочитаю вывод Рабочего запроса 2, поскольку получаю счет без учета всех остальных данных

    99 | 98 | 97
-------|----|-------
    3  |  1 | 1

Почему возникает ошибка при попытке поворота при указании столбцов непосредственно из таблицы?

SQL Пример Fiddle - ошибка на 3-й запрос

1 Ответ

2 голосов
/ 22 января 2020

После pivot, name больше не находится в наборе результатов. Он был заменен счетчиком и столбцами с такими именами, как «99».

Именно поэтому часто используют select * с pivot. Большинство столбцов уже перечислены в предложении in.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...