2011-03-24 56 views
2

我有一個sql查詢,其中我有一個計算字段來計算貢獻幅度。我得到它顯示和數學運作良好。我遇到的問題是我只想顯示貢獻幅度低於0.25的記錄。我知道你不能在where子句中使用列別名。我想知道做這件事的最好方法是什麼。我也爲此使用Visual Studio。在SQL查詢中使用計算字段

回答

4
SELECT * 
FROM (
     SELECT m.*, 
       compute_margin(field1, field2) AS margin 
     FROM mytable m 
     ) q 
WHERE margin < 0.25 
1

不能使用列別名(除非你使用你原來的查詢作爲子查詢),但您可以使用您使用定義的計算值的表達式。

例如,如果您的查詢是現在這樣:

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

您可以

  • 重複在計算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 
0

兩種方式的一個例子,要麼Quassnoi發佈解決方案(你也可以使用一個CTE這是類似)

WHERE compute_margin(field1, field2) < 0.25