Фильтр на основе искаженного имени столбца

Я использую SqlServer 2005, и у меня есть столбец, который я назвал.

Запрос - что-то как:

SELECT id, CASE WHEN <snip extensive column definition> END AS myAlias
FROM myTable
WHERE myAlias IS NOT NULL

Однако это дает мне ошибку:

"Недопустимое имя столбца 'myAlias'".

Существует ли способ обойти это? В прошлом я включал определение столбца или в, ГДЕ или раздел НАЛИЧИЯ, но это было главным образом просто, КОЛИЧЕСТВО IE (*) или что бы то ни было. Я могу включать целое определение столбца в этот специальный запрос, но если бы по некоторым причинам я должен был сделать это в производственном запросе, то я предпочел бы иметь определение столбца только однажды, таким образом, я не должен обновить и (и забыть делать тот в какой-то момент),

12
задан Nathan Koop 22 February 2010 в 14:58
поделиться

4 ответа

Вы не можете ссылаться на псевдонимы в предложении where, подобное этому ... вам либо нужно продублировать CASE в WHERE, либо вы можете использовать такой подзапрос:

SELECT id, myAlias
FROM
(
    SELECT id, CASE WHEN <snip extensive column definition> END AS myAlias
    FROM myTable
) data
WHERE myAlias IS NOT NULL
15
ответ дан 2 December 2019 в 06:44
поделиться

Использование CTE также является вариантом:

;with cte (id, myAlias)
 as (select id, case when <snip extensive column definition> end as myAlias 
      from myTable)
 select id, myAlias
  from cte
  where myAlias is not null
5
ответ дан 2 December 2019 в 06:44
поделиться

Поместите тот же CASE оператор в WHERE предложение:

SELECT id, CASE WHEN <snip extensive column definition> END AS myAlias
FROM myTable
WHERE CASE WHEN <snip extensive column definition> END IS NOT NULL

EDIT

Другой вариант - вложить запрос:

SELECT id, myAlias
FROM (
    SELECT id, CASE WHEN <snip extensive column definition> END AS myAlias
    FROM myTable
) AS subTable
WHERE myAlias IS NOT NULL

(Edit: removed HAVING option, as that was incorrect (thanks @OMG Ponies))

2
ответ дан 2 December 2019 в 06:44
поделиться

Установить границу метки можно с помощью соответствующего свойства CALayer:

#import <QuartzCore/QuartzCore.h>

myLabel.layer.borderColor = [UIColor greenColor].CGColor;
myLabel.layer.borderWidth = 3.0;

Swift 5:

myLabel.layer.borderColor = UIColor.darkGray.cgColor;
myLabel.layer.borderWidth = 3.0;
-121-2015739-

введите в подсказке matlab:

>> help format

Я думаю, что нужно выполнить команду "FORMAT LONG" перед выполнением сценария.

Можно также распечатать матрицу с произвольной точностью, используя fprintf в цикле.

-121--4859361-

поместить дело в где. SQL Server будет достаточно умен, чтобы просто оценить его один раз, так что вы на самом деле не дублируете код:

SELECT id, CASE WHEN <snip extensive column definition> END AS myAlias
FROM myTable
WHERE CASE WHEN <snip extensive column definition> END IS NOT NULL

вы можете обернуть его в производную таблицу:

SELECT dt.id, dt.myAlias
    FROM (
          SELECT id, CASE WHEN <snip extensive column definition> END AS myAlias
          FROM myTable
         ) dt
    WHERE dt.myAlias IS NOT NULL

Однако я стараюсь избегать производных таблиц без ограничения WHERE. Вы можете попробовать проверить, влияет ли это на производительность.

1
ответ дан 2 December 2019 в 06:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: