Джейми упомянул об этом в комментарии, но я постараюсь объяснить немного подробнее.В целях иллюстрации предположим, что у меня есть две очень простые таблицы:
create table CouncilA (LOCAL_COUNCIL int);
create table CouncilB (LOCAL_COUNCIL int);
insert CouncilA values (1);
insert CouncilB values (1);
SQL Server позволяет запрашивать набор результатов с неуникальными именами столбцов.Например, допустимо следующее:
select *
from
CouncilA A
inner join CouncilB B on A.LOCAL_COUNCIL = B.LOCAL_COUNCIL;
Он создает следующий набор результатов:
LOCAL_COUNCIL LOCAL_COUNCIL
1 1
Однако документация для общих табличных выражений явно заявляет:
Дубликаты имен в пределах одного определения CTE не допускаются.
Поэтому, если я попытаюсь обернуть мой предыдущий запрос, как это было сделано в ходе вашей попытки конвертации:
with CTE as
(
select *
from
CouncilA A
inner join CouncilB B on A.LOCAL_COUNCIL = B.LOCAL_COUNCIL
)
select * from CTE;
Тогда я получу сообщение об ошибке, что вывидя:
Msg 8156, Level 16, State 1, Line 7
The column 'LOCAL_COUNCIL' was specified multiple times for 'CTE'.
Между прочим, то же самое верно для подпункта SELECT
:
select * from
(
select *
from
CouncilA A
inner join CouncilB B on A.LOCAL_COUNCIL = B.LOCAL_COUNCIL
) X;
Результат:
Msg 8156, Level 16, State 1, Line 13
The column 'LOCAL_COUNCIL' was specified multiple times for 'X'.
Сообщение об ошибке, которое вы видитеотносится к ORIG
, которое является именем вашего CTE, поэтому определение этого CTE имеет несколько столбцов с именем LOCAL_COUNCIL
, что, вероятно, означает, что в вашей таблице ES_W_ORG_DIM_INIT
есть столбец с именем LOCAL_COUNCIL
.Убедитесь, что имена ваших столбцов уникальны в вашем CTE, и с вами должно быть все в порядке.