Как исправить ошибку "Недопустимое имя столбца ..." в запросе SQL?
Имеется запрос:
SELECT ПК.КодП, ПК.КодК, ПК.Совм, Н.УчебныйГ, ПК.Ставок,
IIF((select ЗначениеЛогическое from НагПарамС where Код = 27) = 0, 0, 1) AS Коэф,
IIF(Коэф = 0,
SUM(ISNULL(Н.НагрузкаАуд, 0) + ISNULL(Н.НагрузкаДр, 0)) * Н.НормКоэф,
SUM(ISNULL(Н.НагрузкаАуд, 0)) + SUM(ISNULL(Н.НагрузкаДр, 0)) * Н.НормКоэф
) AS ЧасовЧ
FROM dbo.ПреподКаф AS ПК INNER JOIN dbo.Нагрузка AS Н ON ПК.Код = Н.КодД
WHERE Н.УчебныйГ = '2018-2019' AND Н.УчебныйГ = ПК.УчебныйГ AND (Н.КодК = '11')
GROUP BY ПК.КодП, ПК.КодК, ПК.Совм, Н.УчебныйГ, ПК.Ставок
HAVING(ЧасовЧ > ПК.Ставок * 900 )
ORDER BY ПК.КодК, Н.УчебныйГ, ЧасовЧ
При его выполнении возникает 2 ошибки:
Сообщение 207, уровень 16, состояние 1, строка 10
Недопустимое имя столбца "ЧасовЧ".
Сообщение 207, уровень 16, состояние 1, строка 3
Недопустимое имя столбца "Коэф".
В интернете видел примеры запросов, где таким же ключевым словом "as" объявлялся столбец и затем беспроблемно использовался в конструкции Having. Что исправить в запросе, чтобы и у меня работало? Использую SQL Server 18.
Ответы (2 шт):
Автор решения: Aziz Umarov
→ Ссылка
У вас слишком хитрый запрос, вы всё хотите за раз выполнить.
IIF(Коэф = 0, - объявляется и тут же используется. ЧасовЧ такая же история. Придется подготовить подзапрос либо использовать как есть
Автор решения: Viktor Bezrukov
→ Ссылка
Решил проблему введением переменной, работающий запрос выглядит так:
DECLARE @temp int;
SET @temp = (select ЗначениеЛогическое from НагрузкаПарамС where Код = 27);
SELECT ПК.КодП, ПК.КодК, ПК.Совм, Н.УчебныйГ, ПК.Ставок,
IIF(@temp = 0,
SUM(ISNULL(Н.НагрузкаАуд, 0) + ISNULL(Н.НагрузкаДр, 0)) * Н.НормКоэф,
SUM(ISNULL(Н.НагрузкаАуд, 0)) + SUM(ISNULL(Н.НагрузкаДр, 0)) * Н.НормКоэф
) AS ЧасовЧ
FROM dbo.ПреподКаф AS ПК INNER JOIN dbo.Нагрузка AS Н ON ПК.Код = Н.КодД
WHERE Н.УчебныйГ = '2018-2019' AND Н.УчебныйГ = ПК.УчебныйГ AND (Н.КодК = '11')
GROUP BY ПК.КодП, ПК.КодК, ПК.Совм, Н.УчебныйГ, ПК.Ставок, Н.НормКоэф
HAVING(IIF(@temp = 0,
SUM(ISNULL(Н.НагрузкаАуд, 0) + ISNULL(Н.НагрузкаДр, 0)) * Н.НормКоэф,
SUM(ISNULL(Н.НагрузкаАуд, 0)) + SUM(ISNULL(Н.НагрузкаДр, 0)) * Н.НормКоэф
) > ПК.Ставок * 900 )
ORDER BY ПК.КодК, Н.УчебныйГ, ЧасовЧ