Как использовать несуществующий столбец в запросе sql

Я работаю в SQL Server 2012. Мне нужно написать оператор sql, в котором я сначала присваиваю значение [Pay_Type], который является несуществующим столбцом (не уверен, можно ли его назвать переменной или нет) и на основе его значение, которое я хочу использовать в другом операторе case, как показано ниже

SELECT sp.First_Name, [Pay_Type] = CASE WHEN NOT EXISTS(SELECT '1' FROM 
PERSON_SALARY ps WHERE ps.PARTY_ID = sp.PARTY_ID and ps.END_DATE IS NULL) 
THEN 'Hourly' ELSE 'Salary' END,
HOURLY_RATE = CASE WHEN [Pay_Type] = 'Hourly' THEN pj.HOURLY_RATE ELSE 
'0.00' END
FROM SEC_PERSON sp 
LEFT OUTER JOIN PERSON_JOB pj ON sp.PERSON_ID = pj.PERSON_ID 
WHERE sp.END_DATE IS NOT NULL

Но я получаю сообщение об ошибке «Неверное имя столбца Pay_Type».

Не могли бы вы перейти к концу заявления Case и заняться AS "Pay_Type"?

dbmitch 29.05.2018 19:20

Чтобы иметь возможность ссылаться на столбцы, которые вы создали, с помощью псевдонима, вам нужно сделать их внутри производной таблицы, перекрестного / внешнего применения или CTE

James Z 29.05.2018 19:21

Возможный дубликат Ссылка на псевдоним в другом месте списка SELECT

Tab Alleman 29.05.2018 19:21
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
3
625
1

Ответы 1

Псевдонимы столбцов нельзя повторно использовать в том же SELECT, где они определены. Типичный ответ - использовать подзапрос или CTE. Еще мне нравится использовать боковое соединение:

SELECT sp.First_Name, s.Pay_Type,
       HOURLY_RATE = (CASE WHEN s.Pay_Type = 'Hourly' THEN pj.HOURLY_RATE ELSE 
'0.00' END)
FROM SEC_PERSON sp LEFT OUTER JOIN
     PERSON_JOB pj
     ON sp.PERSON_ID = pj.PERSON_ID OUTER APPLY
     (SELECT (CASE WHEN NOT EXISTS (SELECT 1
                                    FROM PERSON_SALARY ps
                                    WHERE ps.PARTY_ID = sp.PARTY_ID and ps.END_DATE IS NULL
                                   ) 
                   THEN 'Hourly' ELSE 'Salary'
             END) as PayType
     ) s    
WHERE sp.END_DATE IS NOT NULL

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