OVH Cloud OVH Cloud

requete en sqlserver

8 réponses
Avatar
olivier
Bonjour à tous,

j'ai un probleme au niveau d'une requete
j'aimerais selectionne tous les records qui sont superieur à un certain prix
mais que si les donnees sotn superieur à 0, car sinon cela me fait une
division par zero.


select aff_id from topmandats where
iif(IsEmpty(aff_prix)=false and
IsEmpty(aff_surf_habitable)=false,(aff_prix/aff_surf_habitable),0) > 10000

Et cela ne marche pas


Olivier

8 réponses

Avatar
Thierry
Bonjour,

select * from topmandats
where aff_surf_habitable>0
and aff_prix/aff_surf_habitable> 10000

La 2ème condition ne sera jamais évaluée si la première n'est pas vérifié.

--
Thierry


"olivier" a écrit dans le message de news:
uEQp$

Bonjour à tous,

j'ai un probleme au niveau d'une requete
j'aimerais selectionne tous les records qui sont superieur à un certain
prix
mais que si les donnees sotn superieur à 0, car sinon cela me fait une
division par zero.


select aff_id from topmandats where
iif(IsEmpty(aff_prix)úlse and
IsEmpty(aff_surf_habitable)úlse,(aff_prix/aff_surf_habitable),0) > 10000

Et cela ne marche pas


Olivier



Avatar
Thierry
>
La 2ème condition ne sera jamais évaluée si la première n'est pas vérifié.




Réflexion faite, je ne parierai pas la dessus.

Il est plus sage de faire :

SELECT * FROM topmandats
WHERE
CASE
WHEN aff_surf_habitable=0 THEN 0
ELSE aff_prix/aff_surf_habitable
END > 10000
Avatar
olivier
Pardonne moi thierry,
mais je n'ai pas compris la subtilité

La 2ème condition ne sera jamais évaluée si la première n'est pas vérifié


Normalement c'est ce que je veux faire ne pas evaluer la seconde condition
si la condition 1 n'est pas rempli


Sinon dans ton deuxieme ex , on obtient zero dans le record correspondant.

Ai je bien compris ?

Olviier





"Thierry" a écrit dans le message de news:

>
La 2ème condition ne sera jamais évaluée si la première n'est pas
vérifié.




Réflexion faite, je ne parierai pas la dessus.

Il est plus sage de faire :

SELECT * FROM topmandats
WHERE
CASE
WHEN aff_surf_habitable=0 THEN 0
ELSE aff_prix/aff_surf_habitable
END > 10000



Avatar
Thierry
Lorsqu'on écrit "WHERE <COND1> AND <COND2>, on ne peut pas présumer que si
<COND1> est fausse, <COND2> ne sera jamais évalué par SQL SERVER. Il me
semble que ça dépend des cas. Sql Serveur peut très bien décider d'évaluer
<COND2> d'abord ou d'évaluer les 2 conditions tout de même.

Donc, il est préférable d'utiliser le CASE.

--
Thierry


"olivier" a écrit dans le message de news:

Pardonne moi thierry,
mais je n'ai pas compris la subtilité

La 2ème condition ne sera jamais évaluée si la première n'est pas vérifié


Normalement c'est ce que je veux faire ne pas evaluer la seconde condition
si la condition 1 n'est pas rempli


Sinon dans ton deuxieme ex , on obtient zero dans le record correspondant.

Ai je bien compris ?

Olviier





"Thierry" a écrit dans le message de news:

>
La 2ème condition ne sera jamais évaluée si la première n'est pas
vérifié.




Réflexion faite, je ne parierai pas la dessus.

Il est plus sage de faire :

SELECT * FROM topmandats
WHERE
CASE
WHEN aff_surf_habitable=0 THEN 0
ELSE aff_prix/aff_surf_habitable
END > 10000







Avatar
olivier
ok message recu,

Je pensais que la code s'evaluait en fonction de la lecture.

MErci Thierry

En attendant cela marche , (la 1er reponse)
Est ce que tu penses que cela peut dependre des cas ?

Ou on peut considere que si cela marche ca marchera à tous les couts.

Olivier


"Thierry" a écrit dans le message de news:

Lorsqu'on écrit "WHERE <COND1> AND <COND2>, on ne peut pas présumer que si
<COND1> est fausse, <COND2> ne sera jamais évalué par SQL SERVER. Il me
semble que ça dépend des cas. Sql Serveur peut très bien décider
d'évaluer <COND2> d'abord ou d'évaluer les 2 conditions tout de même.

Donc, il est préférable d'utiliser le CASE.

--
Thierry


"olivier" a écrit dans le message de news:

Pardonne moi thierry,
mais je n'ai pas compris la subtilité

La 2ème condition ne sera jamais évaluée si la première n'est pas vérifié


Normalement c'est ce que je veux faire ne pas evaluer la seconde
condition si la condition 1 n'est pas rempli


Sinon dans ton deuxieme ex , on obtient zero dans le record
correspondant.

Ai je bien compris ?

Olviier





"Thierry" a écrit dans le message de news:

>
La 2ème condition ne sera jamais évaluée si la première n'est pas
vérifié.




Réflexion faite, je ne parierai pas la dessus.

Il est plus sage de faire :

SELECT * FROM topmandats
WHERE
CASE
WHEN aff_surf_habitable=0 THEN 0
ELSE aff_prix/aff_surf_habitable
END > 10000











Avatar
Thierry
Essayes :

select * from topmandats
where aff_surf_habitable<>0
and aff_prix/aff_surf_habitable> 10000


--
Thierry


"olivier" a écrit dans le message de news:

ok message recu,

Je pensais que la code s'evaluait en fonction de la lecture.

MErci Thierry

En attendant cela marche , (la 1er reponse)
Est ce que tu penses que cela peut dependre des cas ?

Ou on peut considere que si cela marche ca marchera à tous les couts.

Olivier


"Thierry" a écrit dans le message de news:

Lorsqu'on écrit "WHERE <COND1> AND <COND2>, on ne peut pas présumer que
si <COND1> est fausse, <COND2> ne sera jamais évalué par SQL SERVER. Il
me semble que ça dépend des cas. Sql Serveur peut très bien décider
d'évaluer <COND2> d'abord ou d'évaluer les 2 conditions tout de même.

Donc, il est préférable d'utiliser le CASE.

--
Thierry


"olivier" a écrit dans le message de news:

Pardonne moi thierry,
mais je n'ai pas compris la subtilité

La 2ème condition ne sera jamais évaluée si la première n'est pas
vérifié


Normalement c'est ce que je veux faire ne pas evaluer la seconde
condition si la condition 1 n'est pas rempli


Sinon dans ton deuxieme ex , on obtient zero dans le record
correspondant.

Ai je bien compris ?

Olviier





"Thierry" a écrit dans le message de news:

>
La 2ème condition ne sera jamais évaluée si la première n'est pas
vérifié.




Réflexion faite, je ne parierai pas la dessus.

Il est plus sage de faire :

SELECT * FROM topmandats
WHERE
CASE
WHEN aff_surf_habitable=0 THEN 0
ELSE aff_prix/aff_surf_habitable
END > 10000















Avatar
Fred BROUARD
SELECT aff_id
FROM topmandats
WHERE aff_prix/NULLIF(aff_surf_habitable, 0) > 1000

A +

olivier a écrit:
Bonjour à tous,

j'ai un probleme au niveau d'une requete
j'aimerais selectionne tous les records qui sont superieur à un certain prix
mais que si les donnees sotn superieur à 0, car sinon cela me fait une
division par zero.


select aff_id from topmandats where
iif(IsEmpty(aff_prix)úlse and
IsEmpty(aff_surf_habitable)úlse,(aff_prix/aff_surf_habitable),0) > 10000

Et cela ne marche pas


Olivier





--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************
Avatar
olivier
salut fred,

C'est pas mal du tout,
dis moi est ce que nullif test si c'est null mais aussi vide quand on a un
zero.?



Olivier




"Fred BROUARD" a écrit dans le message de news:
%
SELECT aff_id
FROM topmandats
WHERE aff_prix/NULLIF(aff_surf_habitable, 0) > 1000

A +

olivier a écrit:
Bonjour à tous,

j'ai un probleme au niveau d'une requete
j'aimerais selectionne tous les records qui sont superieur à un certain
prix
mais que si les donnees sotn superieur à 0, car sinon cela me fait une
division par zero.


select aff_id from topmandats where
iif(IsEmpty(aff_prix)úlse and
IsEmpty(aff_surf_habitable)úlse,(aff_prix/aff_surf_habitable),0) >
10000

Et cela ne marche pas


Olivier



--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************