Utilisation de clause where stockée en DB

badside Messages postés 78 Date d'inscription vendredi 15 octobre 2004 Statut Membre Dernière intervention 16 mars 2012 - 23 avril 2010 à 12:42
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 - 26 avril 2010 à 20:48
Bonjour,

J'aimerais récupérer la somme de plusieurs montants stockés dans une table et sélectionnés sur des critères repris dans une clause where stockée dans une autre table.

Ma query est la suivante :

SELECT SUM(MONTANT) FROM TABLE_MONTANT WHERE (SELECT CLAUSE FROM TABLE_CLAUSE WHERE CRITERE1 'Crit1' AND CRITERE2 'Crit2')

Quand j'exécute la query, il me met l'erreur suivante :

Server: Msg 170, Level 15, State 1, Line 1
Line 1: Incorrect syntax near ')'.


J'ai essayé sans les parenthèses, soit comme ceci :

SELECT SUM(MONTANT) FROM TABLE_MONTANT WHERE SELECT CLAUSE FROM TABLE_CLAUSE WHERE CRITERE1 'Crit1' AND CRITERE2 'Crit2'


Il me met alors l'erreur suivante :

Server: Msg 156, Level 15, State 1, Line 1
Incorrect syntax near the keyword 'SELECT'.


Déjà, est-ce possible ?

Si oui, comment faire ?

C'est assez urgent ...
Merci beaucoup d'avance !

4 réponses

cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
23 avril 2010 à 13:19
Salut,

Il te faut faire une jointure :
SELECT SUM(MONTANT) FROM TABLE_MONTANT JOIN TABLE_CLAUSE ON idTableClause idTableMontant WHERE CRITERE1 'Crit1' AND CRITERE2 = 'Crit2'


Il faut bien entendu que la table TABLE_CLAUSE ait une référence vers l'id de la table TABLE_MONTANT
______________________________________

AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement
0
badside Messages postés 78 Date d'inscription vendredi 15 octobre 2004 Statut Membre Dernière intervention 16 mars 2012
23 avril 2010 à 14:17
Salut !

Merci pour ta réponse mais ce n'est pas ce que je voulais exactement.

Le but était de rendre dynamique la sélection des lignes dans la table TABLE_MONTANT par des clauses where prédéfinies dans la table TABLE_CLAUSE et portant sur les colonnes de la table TABLE_MONTANT.

Je pense que ce n'est pas possible directement par SQL mais je peux (j'aimerais) me tromper ...

Quelqu'un a une idée ?
0
badside Messages postés 78 Date d'inscription vendredi 15 octobre 2004 Statut Membre Dernière intervention 16 mars 2012
26 avril 2010 à 20:30
Personne ?
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
26 avril 2010 à 20:48
Salut,

Oups, j'avais pas vu que tu avais répondu.

Une clause where est un critère de sélection. Dans ta requête initiale, tu n'as pas critère, tu n'as qu'une requête.

Si tu veux vraiment utilisée une requête imbriquée comme tu le fais, il te faut utiliser le mot-clé IN, par exemple :

SELECT SUM(MONTANT) FROM TABLE_MONTANT WHERE TABLE_MONTANT.CLAUSE IN (SELECT CLAUSE FROM TABLE_CLAUSE WHERE CRITERE1 'Crit1' AND CRITERE2 'Crit2')


Mais une jointure serait bien plus efficace.
______________________________________

AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement
0
Rejoignez-nous