Ошибка «Недопустимое имя столбца» в инструкции SQL из результатов OpenQuery

Я пытаюсь выполнить SQL-запрос через связанный сервер SSAS. Первоначальный запрос работает нормально:

SELECT "Ugly OLAP name" as "Value" 
FROM OpenQuery( OLAP, 'OLAP Query')

Но если я попытаюсь добавить:

WHERE "Value" > 0

Я получаю ошибку

Invalid column name 'Value'

Есть идеи, что я делаю неправильно?


Таким образом, проблема заключалась в том, что порядок, в котором обрабатываются элементы запроса, отличается от порядка их написания. Согласно этому источнику:

http://blogs.x2line.com/al/archive/2007/06/30/3187.aspx

Порядок оценки в MSSQL:

  1. ИЗ
  2. НА
  3. ПРИСОЕДИНИТЬСЯ
  4. КУДА
  5. ГРУППА ПО
  6. ИМЕЮЩИЕ
  7. ВЫБРАТЬ
  8. СОРТИРОВАТЬ ПО

Таким образом, псевдоним не обрабатывался до тех пор, пока не было предложений WHERE и HAVING.

Что за все эти «не-ответы» на этот вопрос !?

Lightness Races in Orbit 27.07.2011 21:20
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
21
1
82 675
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

О, облом. Я только что видел, вы выбираете КАК FOO. Разве в этом случае вам не нужен ХОРОШОЙ клаус?

SELECT whatever AS value FROM table HAVING value > 1;

Я бы все равно не использовал «ценность». Но чтобы быть уверенным, поищите это в своей документации!

Ответ принят как подходящий

Это должно работать:

SELECT A.Value
FROM (
SELECT "Ugly OLAP name" as "Value" 
FROM OpenQuery( OLAP, 'OLAP Query')
) AS a
WHERE a.Value > 0

Дело не в том, что Value - зарезервированное слово, проблема в том, что это псевдоним столбца, а не имя столбца. Сделав это встроенным представлением, «Value» становится именем столбца и затем может использоваться в предложении where.

Вы используете «Value» в качестве псевдонима столбца, и я не думаю, что псевдоним может появиться в предложении where. Он просто используется для обозначения возвращаемого значения столбца. Предложение where должно ссылаться на исходное имя столбца:

SELECT "Ugly OLAP name" as "Value" 
FROM OpenQuery( OLAP, 'OLAP Query')
WHERE "Ugly OLAP name" > 0

Могу поручиться за то, что не включил его в GROUP BY. Хорошая новость в том, что он отлично работает, будучи простым старым выбранным псевдонимом.

Другие вопросы по теме