2010-08-06 14 views
1

Aujourd'hui, j'ai commencé à écrire une requête qui est comme indiqué ci-dessous:Comment mettre le nom de la colonne dans le type de données sqlsever CAST?


SELECT IP1.InstId,CAST(IP2.Quote AS DECIMAL(10,2)) AS 'CurrentPrice',IP1.Quote,(IP2.Quote-IP1.Quote) AS 'Change' 
FROM InstrumentPrices IP1 
INNER JOIN InstrumentPrices IP2 
ON IP1.InstId=IP2.InstId 
INNER JOIN Instruments I 
ON I.Id=IP2.InstId 
INNER JOIN Games G 
ON G.Id=IP1.GameId 
AND G.CurrentPeriod-2=IP1.Period 
AND G.CurrentPeriod-1=IP2.Period 

Au-dessus de requête me retourné avec les résultats attendus. Ensuite, j'ai changé la sortie de la colonne IP2.Quote de telle sorte qu'elle renvoie les points décimaux en fonction d'une autre colonne NDP dans la table Instruments. La requête modifiée est comme indiqué ci-dessous:


SELECT IP1.InstId,CAST(IP2.Quote AS DECIMAL(10,I.NDP)) AS 'CurrentPrice',IP1.Quote,(IP2.Quote-IP1.Quote) AS 'Change' 
FROM InstrumentPrices IP1 
INNER JOIN InstrumentPrices IP2 
ON IP1.InstId=IP2.InstId 
INNER JOIN Instruments I 
ON I.Id=IP2.InstId 
INNER JOIN Games G 
ON G.Id=IP1.GameId 
AND G.CurrentPeriod-2=IP1.Period 
AND G.CurrentPeriod-1=IP2.Period 

La deuxième requête a renvoyé un retour qui est aussi syntactique ci-dessous:


Msg 102, Level 15, State 1, Line 1 
Incorrect syntax near 'I'. 

Je n'ai pas la moindre idée de l'erreur renvoyée par SQLServer.

S'il vous plaît aider !!!

Merci, Mahesh

+4

Vous lui dites essentiellement de faire varier le type de données de la colonne par ligne. Je doute que ce soit possible. Vous devrez probablement choisir un type de données qui couvrira tous les cas et arrondir les chiffres à i.ndp à la place, ou si c'est juste pour afficher, renvoyer le résultat à une chaîne et retourner une colonne de caractères. – Rup

Répondre

1

Vous semblez essayer de préciser l'ampleur de la virgule décimale dans la distribution basée sur une valeur d'une colonne, vous ne pouvez pas le faire, il est pas valide TSQL.

+0

Merci pour votre réponse. J'ai fini de faire l'arrondi dans le code .NET. – Mahesh