2009-06-17 7 views
3

Voici l'instruction SELECT:Fonction SQL Round ne fonctionne pas, des idées?

SELECT ROUND(ISNULL(SUM(Price),0),2) As TotalPrice 
FROM Inventory 
WHERE (DateAdded BETWEEN @StartDate AND @EndDate) 

Toute idée de pourquoi il n'arrondi à deux décimales?

+0

Quel est le résultat, si vous n'utilisez pas la fonction ROUND? – shahkalpesh

Répondre

8

au lieu de ROUND(ISNULL(SUM(Price),0),2) vous pouvez essayer CAST(ISNULL(SUM(PRICE),0) AS DECIMAL (4,2))

+0

Parfait et juste me rappelle les bases quand il le faut :) – bonCodigo

0

Quel type de données est le prix?

ROUND in BOL

SELECT ROUND(123.4545, 2); -- = 123.4500 
GO 
SELECT ROUND(123.45, -2); -- = 100,00 
GO 

Le type de données sous-jacent reste le même: vous simplement rond, mais laissez zéros.

Pour 2 décimale de sortie, vous aurez besoin de CAST en décimal (x, 2)

1

Vous pourriez avoir des problèmes de triage pour la colonne dans votre environnement. Peut essayer un cast explicite CAST (ROUND (...) AS NUMERIC (18,4)) ou même simplement essayer de faire 0 0.0. Assurez-vous également que vous liez la colonne avec le type de données approprié dans votre application.

Toutes les personnes cool utilisent COALESCE au lieu de ISNULL. COALESCE est portable et vous pouvez avoir autant de paramètres que vous voulez (pas seulement deux !!)

De toute façon, je ne sais pas si c'était juste un exemple, mais vous pouvez aussi avoir des problèmes de DA avec vos données si elle n'avait pas déjà arrondi à ce stade.

+0

COALESCE s'exécute plus lentement que ISNULL sur MSSQL. À quel point cela est cool? – gbn

+2

ISNULL peut générer de meilleurs plans d'exécution si elle est utilisée dans la clause WHERE. Il n'a aucun effet tangible sur la performance des ensembles de résultats. – Einstein

+0

Les gens si cool sont incompatibles? ISNULL dans les clauses WHERE, COALECSE dans les clauses SELECT ... – gbn