2009-06-15 7 views
0

J'ai une table avec quatre colonnes (année, mois, Nom & Valeur)SQL Server 2005: Recherche/accès à la valeur de (currentrow-N) et implémentation d'une formule?

Je veux ajouter une autre colonne (new_value) qui est calculée par la formule suivante

NEW_VALUE = (valeur de currentMonth/VALEUR de (currentMonth-4))^1/3

exemple

Year Month NAME VALUE NEW_VALUE 
2008  01  A  4.412  ? 
2008  02  B  4.941 
2008  03  C  4.815 
2008  04  D  4.246 
2008  05  E  4.100 
2008  06  F  4.490 
2008  07  G  4.465 
2008  08  H  4.636 
2008  09  I  4.045 
2008  10  J  5.543 
2008  11  K  5.722 
2008  12  L  5.326 

par exemple: pour le mois 08

NOUVELLE VALEUR = (4,636/4,246)^1/3

Ignore calcul pour quatre premiers mois

Comment puis-je obtenir la « valeur currentMonth-4'th programme dans SQL?

Merci

Répondre

1

Il suffit de se joindre à la table elle-même sur le mois (et éventuellement d'autres colonnes, je ne sais pas vos données)

select TB.Name, TB.Month, (TB.Value/TA.Value)^1/3 -- This calculation won't work, but your parameters are there 
from YourTable TA 
join YourTable TB 
on TA.Month = TB.Month - 4 
+0

Cela va échouer pendant des mois 1-4 – richardtallent

+0

De la question "Ignorer le calcul pour les quatre premiers mois" – Tetraneutron

+0

Mon mauvais ... manqué que dans la question ... – richardtallent

1

similaires à @Tetraneutron:

SELECT tb.Name, tb.Value, POWER(tb.value/ta.value, .3333) AS NewValue 
FROM 
    yourtable ta, 
    yourtable tb 
WHERE 
    (tb.month>4 AND ta.month=tb.month-4 AND tb.year=ta.year) 
    OR (tb.month<=4 AND ta.month=(8+tb.month) AND tb.year=(ta.year+1))