2017-05-22 4 views
1

Ich habe die sql unten, und ich berechne dann eines der Felder (market_cap) innerhalb der Anwendung Code nicht die sql. Ich würde es gerne berechnen und dann die Datensätze basierend auf den Top 7 berechnen, die daraus berechnet werden.sql Spaltenwert berechnen dann bestellen

Vorgeschlagen-ish Sql:

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

Asp-Code für Feld 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 

Also im Grunde braucht es zu überprüfen, ob letzte oder prvclose leer ist, und dann multiplizieren entweder durch currentsharesonissue zu erhalten Marketcap, und dann die Top 7 Zeilen basierend auf dieser Marktkapitalisierung, wie gehe ich darüber? eine temporäre Tabelle zuerst erstellen?

Antwort

1

Sie können dies tun, mit coalesce und ein cte

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

select top 7 * from cte order by CalculatedColumn desc 

COALESCE() wird den ersten NOT NULL Wert nehmen und es durch die currentsharesonissue Spalte multiplizieren. Dann erhalten wir nur die TOP7 wie Sie angegeben haben, in DESCENDING Reihenfolge (vorausgesetzt).

+0

perfekt danke! – PeteTheGreek

+0

Kein Schweiß – scsimon

Verwandte Themen