псевдоним поля Неверное имя столбца - PullRequest
1 голос
/ 04 ноября 2019

получаю эту ошибку Неверное имя столбца 'ALIAS1'

что я могу сделать?

SELECT T.firsrdate, T.lastdate ,
T.lastdate - T.firsrdate as ALIAS1,
case when ALIAS1> 15 then 'a' else 'b' end as ALIAS2 FROM Table1

отправил запрос в комментарии ... спасибо!

Ответы [ 3 ]

1 голос
/ 04 ноября 2019

Если вы используете SQLServer , то проблема не только в вашем псевдониме, а в том, что вычитаете два столбца с типом даты. Также использование псевдонима, созданного в том же самом выборе, не хорошо. Также, если вы используете выражение T.firstdate, вам следует добавить заглавную букву T после имени таблицы.

В моем DEMO

  1. Вы можете видеть, что вычитаниедве даты приведут к ошибке (запрос 1 и query2 и запрос 3 из моей DEMO)
  2. Вы также можете увидеть, что произойдет, если вы не используете псевдоним таблицы T (запрос 4 из моей DEMO)
  3. И вы можете увидеть, что произойдет, если вы используете псевдоним в выбранном вами избранном (запрос 5 из моей демонстрационной версии)

Я считаю, что это то, что вам нужно, если вы используете SQL Server:

SELECT T.firstdate
       , T.lastdate 
       , datediff(day, T.firstdate , T.lastdate) as Alias1
       , case when (datediff(day, T.firstdate , T.lastdate )) > 15 
            then 'a' 
            else 'b' 
         end as Alias2
FROM Table1 T;

Вот пример этого правильного примера: DEMO .

Если вы используете ORACLE , тогда первый запрос будетхорошо, как в этом DEMO

SELECT T.firstdate
       , T.lastdate 
       , (T.lastdate - T.firstdate) as ALIAS1
       , case when (T.lastdate - T.firstdate) > 15 then 'a' else 'b' end as ALIAS2 
FROM Table1 T;

Итак, вы видите, нам нужно знать, какую базу данных вы используете . :)

0 голосов
/ 04 ноября 2019

Кажется, вы работаете с SQL server, если это так, то вы можете использовать apply, чтобы избежать повторения одного и того же выражения:

select t.firstdate, t.lastdate, tt.alias1,
       (case when alias1 > 15 then 'a' else 'b' end) as alias2
from table1 t cross apply
     ( values (t.lastdate - t.firstdate) 
     ) tt(alias1);
0 голосов
/ 04 ноября 2019

встроенный псевдоним не разрешает все дБмс

 SELECT T.firsrdate, T.lastdate ,
T.lastdate - T.firsrdate as ALIAS1,
case when T.lastdate - T.firsrdate> 15 then 'a' else 'b' end as 
 ALIAS2 FROM Table1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...