|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre actif
![]() |
bonjour
est t'il possible d'avoir un champs calculé dans la clause where le but est d'utiliser ce champs dans une comparaison "where" "between" merci et bonne journée |
|
|
00
|
|
|
#2 |
![]() ![]() ![]() David BARBARINExpert SQL Server Inscription : août 2005 Messages : 3 723 ![]() |
Bonjour,
La réponse est oui. Si vous voulez nous donner plus de précisions sur votre probléme n'hésitez pas. ++ |
|
00
|
|
|
#3 | ||||
|
Membre actif
![]() |
voila
pour simplifier supposons que j'ai ces 3 tables : Code :
sum(versements) between sum(VL_PRIX * VL_QTE) pour cela j'ai utilisé cette requête : Code :
|
||||
|
|
00
|
|
|
#4 | ||||||||
![]() ![]() ![]() Nicolas SouquetAdministrateur de base de données Inscription : janvier 2005 Messages : 4 665 ![]() |
Bonjour,
Vous ne pouvez utiliser le alias de colonnes que dans une clause ORDER BY, c'et ce qui fait que votre requête ne fonctionne pas (MONTANT). En outre, vous pouvez utiliser la clause HAVING de la clause GROUP BY : Code :
Vous pouvez aller plus loin en créant une vue indexée qui vous permettra d'optimiser et de simplifier l'expression de votre requête SQL, mais qui a un certain coût de maintenance. C'est parfait si vos tables subissent des changements peu nombreux. En revanche testez bien dans le cas contraire l'impact sur les performances. Code :
Code :
Vous pouvez éventuellement filtrer par date : Code :
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes. Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012 |
||||||||
|
10
|
|
|
#5 | ||
|
Membre Expert
![]() ![]() Inscription : janvier 2010 Messages : 1 084 ![]() |
Bonjour
vous ne pouvez pas utiliser les alias de colonne pour élaborer votre filtres, car les filtres sont appliqués avant même l'évaluation des colonne spécifiées dans le SELECT. Vous devez donc respécifier la formule de calcul D'autre part, vous utilisez une fonction d'agrégat, vous devez donc placer votre filtre dans une clause HAVING Enfin, plutôt qu'une sous requete pour calculer la somme des versements, vous pouvez faire une jointure Essayez ceci : Code sql :
|
||
|
|
10
|
|
|
#6 |
|
Membre actif
![]() |
Merci tout le monde
|
|
|
00
|
|
|
#7 | ||
|
Membre actif
![]() |
Je relance le topic
maintenant que j'ai ma requete qui a l'air de marcher comme ceci Code :
je voudrais ajouter d'autres fonctionnalités : je voudrais avoir un indice de paiement dans le résultat si c'est possible, je m’explique : l'idéal c'est d'avoir une colonne de sortie qui aurait ces valeurs : 0 : quand SUM(VERSEMENTS) = 0; 1 : Quand SUM(VERSEMENTS) between 1 and sum(AD_PRIX * AD_QTE) 2 : quand SUM(VERSEMENTS) = sum(AD_PRIX * AD_QTE) 3 : quand SUM(VERSEMENTS) > sum(AD_PRIX * AD_QTE) le but final c'est avoir un indice visuel dans mon UI bonne journée |
||
|
|
00
|
|
|
#8 | ||
|
Membre Expert
![]() ![]() Inscription : janvier 2010 Messages : 1 084 ![]() |
Alors fait le dans ton UI justement. C'est plus le role du programme de faire ce genre de choses. surtout que de toute façon tu devra quand même y faire un test pour afficher ton indice visuel en fonction...
Donc cette colonne supplémentaire est inutile Enfin si tu y tiens vraiment, voici la syntaxe : Code sql :
attention Le BETWEEN étant sur intervalle inclusif, il faut tester l'égalité avant le between. De même ton cas ne prend pas en compte les valeurs entre 0 et 1... |
||
|
|
10
|
|
|
#9 |
|
Membre actif
![]() |
c'est exactement ce que je voulais
il me manquais la clause Case que je ne savait pas m'en servir cette colonne est en effet un surplus qui me me permet de créer une simple fonction dans mon application (asp.net) qui prendrais un simple entier comme paramètre pour afficher l'image ou l'icone correspondante dans la grille de données encore merci pour votre support |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com