[SQL Serveur] probleme requete avec calcul (tout bete)

probleme requete avec calcul (tout bete) [SQL Serveur] - SQL/NoSQL - Programmation

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 cité 1 fois
Message édité par mrmask le 25-10-2009 à 11:01:01

---------------
Mieux vaut être optimiste et se tromper que pessimiste et avoir raison.
Reply

Marsh Posté le 14-02-2008 à 10:56:02   

Reply

Marsh Posté le 15-02-2008 à 10:33:07    

mrmask a écrit :


 
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


 
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 ...

Reply

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 :(

Reply

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 ?


Message édité par mrmask le 18-02-2008 à 13:56:40
Reply

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 :(

Reply

Marsh Posté le 18-02-2008 à 19:30:38    

mrmask a écrit :

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 :(


 
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


Message édité par tinoui le 18-02-2008 à 20:04:53
Reply

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.

Reply

Marsh Posté le 19-02-2008 à 11:07:55    

+1

Reply

Marsh Posté le 19-02-2008 à 22:04:28    

bien vu ;)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed