簡體   English   中英

通過在SQL Server中將兩個數相除來排序查詢

[英]Ordering query by divide two numbers in Sql Server

我有這樣的Sql Server查詢:

Select       * 
             ,Cast(Column1 as float) as Column1Convert
             ,Cast(Column2 as float) as Column2Convert
             ,Column1Convert/Colun2Convert AS [Result] 
From         MyTable 
Order By     Points DESC, Result ASC

但是我收到錯誤:“無效的列名'Column1Convert'。” 第二個錯誤:“無效的列名'Column2Convert'。”

你能告訴我我做錯了什么嗎?

這是因為您在不允許查詢的同一級別中使用別名。 嘗試:

Select       * 
             ,Cast(Column1 as float) as Column1Convert
             ,Cast(Column2 as float) as Column2Convert
             ,Cast(Column1 as float)/Cast(Column2 as float) AS [Result] 
From         MyTable 
Order By     Points DESC, Result ASC

嘗試這個:

SELECT
    Points, Result, Column1Convert, Column2Convert, 
    Column1Convert/Colun2Convert AS [Result]
FROM
(
    Select       * 
                 ,Cast(Column1 as float) as Column1Convert
                 ,Cast(Column2 as float) as Column2Convert
    From         MyTable 
)
Order By    
    Points DESC, 
    (Column1Convert/Colun2Convert) ASC

在SQL Server中,還有另一種訪問字段別名以進行重用的方法(除了嵌套查詢)

SELECT
      Points
    , ca.Column1Convert
    , ca.Column2Convert
    , ca.Column1Convert / ca.Colun2Convert AS [Result]
FROM MyTable
      CROSS APPLY (
                  SELECT
                        CAST(Column1 AS float) AS Column1Convert
                      , CAST(Column2 AS float) AS Column2Convert
            ) AS ca
ORDER BY
      Points DESC
      , [Result] ASC

如果可用,您可能需要使用TRY_CAST()而不是CAST()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM