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?
您可以使用 coalesce
和 cte
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
顺序(假设)。
我有下面的 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?
您可以使用 coalesce
和 cte
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
顺序(假设)。