probleme requete avec calcul (tout bete) [SQL Serveur] - SQL/NoSQL - Programmation
Marsh Posté le 15-02-2008 à 10:33:07
mrmask a écrit : |
temporairement peux-tu peux enlever l'arrondi dans la requete SQL ?
si cela résoud le probleme, tu pourra peux être encapsuler pvHT * ((100 - remise) / 100)) * (1 + tva / 1000) dans quelque chose qui neutralise le round ...
ce n'est qu'une piste ...
Marsh Posté le 18-02-2008 à 12:55:46
merci pour ta reponse
j'ai testé ceci :
SELECT id_article, pvHT, remise, tva, (pvHT * ((100 - remise) / 100)) * (1 + tva / 1000) AS totalttc
FROM Article
donc sans le round toujours le meme resultat
Marsh Posté le 18-02-2008 à 13:56:09
SELECT id_article, (100 - remise) / 100 AS premise
FROM Article
j'ai toujours premise=0 comme resultat meme si remise = 20
es ce un bug sql serveur ?
Marsh Posté le 18-02-2008 à 14:15:32
j'ai tout re-convert et ca passe :
SELECT id_article, pvHT, remise, tva, ROUND((pvHT * ((100 - CONVERT(float, remise)) / 100)) * (1 + CONVERT(float, tva) / 1000), 2) AS totalttc
FROM Article
WHERE (id_article = 23090)
zarb
Marsh Posté le 18-02-2008 à 19:30:38
mrmask a écrit : j'ai tout re-convert et ca passe : |
cool
il faut se méfier du parsing SQL ... c'est logique mais parfois déroutant
quand on relit le select : (pvHT * ((100 - remise) / 100)) * (1 + tva / 1000) AS totalttc
se résume à expression * expression AS correlation_name
Je crain que sqlserveur n'ai besoin de parentèses avant la clause AS pour bien s'en sortir et revenir à un truc du genre:
expression AS correlation_name
J'ignore si c'est le cas avec d'autre SGBD (je testerais avec DB2 et MySQL)
D'ailleurs: tu pourrais peut etre essayer sans la clause AS
Marsh Posté le 19-02-2008 à 08:29:01
Bonjour,
C'est complètement normal de devoir reconvertir tout tes champs avec SQLServeur, tu lui pose une opération de INT (ou Tiny) il te donne un résultat en INT.
Marsh Posté le 14-02-2008 à 10:56:02
Bonjour,
j'ai un probleme avec une requete tout simple :
SELECT id_article, pvHT, remise, tva, ROUND((pvHT * ((100 - remise) / 100)) * (1 + tva / 1000), 2) AS totalttc
FROM Article
sachant que mon totalttc= pvht * remise * tva
pvht = int 4
remise = int 4
tva = tinyint
remise en pourcent (20,30,40 etc..)
tva= 196
lorsque j'effectue :
totalttc= round(rs("PVHT" ) * ((100-rs("remise" ))/100) * (1+(rs("tva" )/1000)),2)
en asp le resultat est bon, mais impossible d'avoir le result par une requete sql
lorsque ma remise est à 0 j'ai totalttc=pvht des que j'ai une remise totalttc=0
Si qq'un a une idée ?
Merki
Message édité par mrmask le 25-10-2009 à 11:01:01
---------------
Mieux vaut être optimiste et se tromper que pessimiste et avoir raison.