SQL arrondi à 3 décimales à 2 décimales
J'Ai un Rapport SSRS 2008 dont le dataset s'exécute une requête SQL qui retourne une colonne calculée. Ce jeu de données remplit un tableau dans le rapport.
La colonne calculée est de retour jusqu'à 4 décimales. Je tiens à tour la plus proche à 2 décimales. c'est à dire, 8660.125 devrait devenir 8660.13, 1487.8521 devrait devenir 1487.85
Échantillon de la requête:
select [Hours] * [Rate] * [Complexity] * [Efficiency] from Hours
Je perfer pour effectuer cette arrondi dans la Requête SQL plutôt que la SSR table parce que nous essayons de garder les tables "inintelligent" donc, nous pouvons encapsuler tous notre logique dans la Requête SQL elle-même. Des Suggestions?
Cela pourrait aider si vous avez posté un exemple de requête ou un extrait de votre requête.
faire
Souvent sur les rapports, l'arrondi est accompli à l'écran, plutôt que de modifier les données sous-jacentes. Ne pas effectuer une conversion de données si vous n'avez pas à.
Merci
faire
Souvent sur les rapports, l'arrondi est accompli à l'écran, plutôt que de modifier les données sous-jacentes. Ne pas effectuer une conversion de données si vous n'avez pas à.
Merci
OriginalL'auteur MikeTWebb | 2013-01-31
Vous devez vous connecter pour publier un commentaire.
Il y a deux problèmes ici.
La première est l'arrondi. Cela peut facilement être fait avec le
Round
fonction en SQL:La seconde, comme vous pouvez le voir, c'est que cela renvoie toujours 3 chiffres après la virgule. Cela est dû au type de données. Vous avez obtenu votre arrondi de la valeur, mais il est toujours à l'affiche un chiffre supplémentaire.
Vous pouvez corriger cela de cette façon:
Cependant, ces deux valeurs ci-dessus sont identiques numériquement. Et à mon avis, vous ne devriez pas avoir affaire avec la présentation sur le côté de SQL Server. Si vous voulez deux décimales après la virgule, il suffit de régler le format de la cellule dans votre rapport SSRS à
#.00
. Cela permettra d'assurer que vous obtenez le nombre de (arrondi) nombre de décimales que vous souhaitez, n'importe quoi! Il n'existe pas de fonction nécessaire. Juste une simple propriété.C'est le même principe pour les dates. La valeur sous-jacente d'un jour est tout simplement un certain nombre. Mais il y a une multitude de manières de présenter les dates de l'utilisateur--avec de longs noms ou différentes ordre des parties ou à l'aide de différents séparateurs. Chaque fois que vous changez la date, les formats d'aller tout le chemin du retour à votre SQL et de changer votre
Convert()
style?Vous ne vous attendez pas votre Serveur SQL server pour définir la police, la couleur, la taille, le rembourrage, le style, la position ou la visibilité de ces chiffres dans le rapport. Celles-ci doivent être définies manuellement au moment de la conception, trop. Alors, pourquoi voudrais-comment la valeur est affichée (lorsque les valeurs sont exactement égales) être différent? À mon avis, poussant ce dans la requête SQL est le déplacement de la zone de préoccupation à la mauvaise place. C'est en ajoutant de la complexité (et non pas "l'intelligence") à la requête qui n'a pas besoin d'y être! Et je ne vois pas le paramètre le format numérique d'une cellule à "ajouter de l'intelligence".
C'est une présentation préoccupation, alors le garder à la bonne place, que tous les autres éléments de présentation sont abordés--le rapport SSRS.
Mise à jour
Je ne peux penser à un scénario dans lequel vous souhaitez effectuer la conversion dans votre requête, et c'est alors la valeur sera ensuite utilisé dans plus de calculs et les règles de gestion sur ledit calcul exigent. Par exemple, si vous étiez le calcul des intérêts bancaires, ils pourraient avoir des règles comme "après l'étape 1 rond à 4 décimales, puis et après l'étape 3, enfin, arrondis à 2 décimales (en dollars et en cents)." Mais c'est une autre histoire: maintenant, le valeur questions, et pas seulement son affichage.
OriginalL'auteur ErikE
Essayer quelque chose comme l'utilisation de
CAST
-- il doit gérer l'arrondissement pour vous.Ici est la SQL Violon.
Avec votre exemple de requête ci-dessus, utilisez:
Bonne chance.
OriginalL'auteur sgeddes