sql 计算列值然后按它排序

sql calculate column value then order by it

我有下面的 sql,然后我计算应用程序代码中的字段之一 (market_cap) 而不是 sql。我想计算它,然后根据从中计算出的前 7 名对记录进行排序。

拟议 Sql:

SELECT TOP 7 'market_cap' as [market_cap_calc] ??, [tradingcode],[last],[prvclose],[currentsharesonissue]
FROM [PricesCurrent]
ORDER BY tradingcode DESC

Asp 字段代码 market_cap:

If Not IsNull(rs("last")) Then
    marketcap = 0
    If Not IsNull(rs("currentsharesonissue")) And Cdbl(rs("last")) <> 0 Then marketcap = (CDbl(rs("last")) * CDbl(rs("currentsharesonissue")))/1000000.0
End If

If marketcap = 0 And Not IsNull(rs("prvclose")) Then
    If Not IsNull(rs("currentsharesonissue")) And CDbl(rs("prvclose")) > 0 Then marketcap = (CDbl(rs("prvclose")) * CDbl(rs("currentsharesonissue")))/1000000.0
End If

所以基本上它需要检查 last 或 prvclose 是否为空,然后将其中一个乘以 currentsharesonissue 以获得市值,然后根据该市值数字获得前 7 行,我该怎么做?先做一个临时的 table?

您可以使用 coalescecte

WITH CTE AS(
    SELECT
    coalesce([last],[prvclose],0) * currentsharesonissue as CalculatedColumn
    FROM [PricesCurrent])

select top 7 * from cte order by CalculatedColumn desc

COALESCE() 将取第一个 NOT NULL 值并将其乘以 currentsharesonissue 列。然后,我们只得到 TOP7 正如你所说,在 DESCENDING 顺序(假设)。