2017-05-22 3 views
1

J'ai le sql ci-dessous, et je calcule ensuite l'un des champs (market_cap) dans le code de l'application et non le sql. Je voudrais le calculer puis commander les enregistrements basés sur le top 7 calculé à partir de celui-ci.sql calculer la valeur de la colonne puis l'ordonner

Sql-ish proposée:

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

Code Asp pour le champ 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 

Donc, fondamentalement, il doit vérifier si le dernier ou prvclose est vide puis multiplier l'un par currentsharesonissue pour obtenir marketcap, puis obtenir les 7 premières rangées en fonction de ce chiffre marketcap, comment puis-je faire? faire une table temporaire en premier?

Répondre

1

Vous pouvez le faire avec coalesce et un cte

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

select top 7 * from cte order by CalculatedColumn desc 

COALESCE() va prendre la première valeur NOT NULL et le multiplier par la colonne currentsharesonissue. Ensuite, nous obtenons simplement le TOP7 comme vous l'avez indiqué, dans l'ordre DESCENDING (supposé).

+0

parfait merci! – PeteTheGreek

+0

Aucune transpiration du tout – scsimon