Использование вычисляемого поля в SQL-запросе - PullRequest
2 голосов
/ 24 марта 2011

У меня есть SQL-запрос, в котором у меня есть вычисляемое поле, которое вычисляет маржу взносов. Я получаю его для отображения, и математика работает отлично. Проблема, с которой я столкнулся, заключается в том, что я хочу отображать только записи, в которых маржинальная прибыль меньше 0,25. Я знаю, что вы не можете использовать псевдоним столбца в предложении where. Мне было интересно, каким будет лучший способ сделать это. Я также использую Visual Studio для этого.

Ответы [ 4 ]

4 голосов
/ 24 марта 2011
SELECT  *
FROM    (
        SELECT  m.*,
                compute_margin(field1, field2) AS margin
        FROM    mytable m
        ) q
WHERE   margin < 0.25
1 голос
/ 24 марта 2011

Вы не можете использовать псевдоним столбца (если только вы не используете свой исходный запрос в качестве подзапроса), но вы можете использовать выражение, которое вы используете для определения вычисляемого значения.

Например, еслиВаш запрос таков:

select
    contribution_amount,
    total_amount,
    contribution_amount / total_amount as contribution_margin

from records

Вы можете сделать это:

select
    contribution_amount,
    total_amount,
    contribution_amount / total_amount as contribution_margin

from records

where contribution_amount / total_amount < 0.25

Или это:

select * from
(
    select
        contribution_amount,
        total_amount,
        contribution_amount / total_amount as contribution_margin

    from records
)
where contribution_margin < 0.25

(Лично я считаю, что первая версияпредпочтительнее, но оба будут работать одинаково)

0 голосов
/ 24 марта 2011

двумя способами, либо решение, опубликованное Quassnoi (вы также можете использовать CTE, который похож)

или WHERE compute_margin(field1, field2) < 0.25

0 голосов
/ 24 марта 2011

Вы можете либо

  • повторить вычисление в предложении where
  • заключить запрос в выражение таблицы (CTE или производную таблицу) и использовать псевдоним в предложении where
  • назначить псевдоним в cross apply.

. Привести пример последнего подхода

select doubled_schema_id,*
from sys.objects
cross apply (select schema_id*2 as doubled_schema_id) c
where doubled_schema_id= 2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...