miikado69
Messages postés11Date d'inscriptionlundi 29 décembre 2003StatutMembreDernière intervention15 avril 2012
-
29 août 2010 à 15:23
cs_Jack
Messages postés14007Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 2015
-
31 août 2010 à 09:14
Bonjour,voici une requette qui ne fonctionne pas ce qui m'etonne pas vu que je ne suis pas très fort en SQL.
Je veux récupérer la valeur la plus haute de 'Transfert' par rapport à la valeur 'SolutionID' qui elle change suivant une sélection.
SELECT SolutionID, Transfert (
FROM TABLE_TRANSFERTSOLUTION
WHERE SolutionID = @SolutionID)
GROUP BY Transfert
HAVING (Transfert =(SELECT MAX(Transfert) AS Expr1 FROM TABLE_TRANSFERTSOLUTION AS TABLE_TRANSFERTSOLUTION_1))
voici l'erreur,
la colonne 'TABLE_TRANSFERTSOLUTION.SolutionID' n'est pas valide dans la liste de sélection parce qu'elle n'est pas contenue dans une fonction d'agrégation ou dans une clause GROUPE BY
En espérant avoir été clair, merci de votre aide.
Miikado
cs_Jack
Messages postés14007Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 29 août 2010 à 20:07
Salut
L'erreur est dû à l'utilisation de parenthèses au mauvais endroit, devant le FROM = inutiles et bloquantes/buggantes
Cette syntaxe marchera surement mieux :
SELECT SolutionID, Transfert
FROM TABLE_TRANSFERTSOLUTION
WHERE SolutionID = @SolutionID
GROUP BY Transfert
HAVING (Transfert =(SELECT MAX(Transfert) AS Expr1 FROM TABLE_TRANSFERTSOLUTION AS TABLE_TRANSFERTSOLUTION_1))
Le GROUP BY n'est pas utile (puisque'il n'y aura qu'un seul MAX) et je ne suis pas certain qu'il soit autorisé en même temps que HAVING.
Autre syntaxe possible, je pense :
SELECT SolutionID, Transfert
FROM TABLE_TRANSFERTSOLUTION
WHERE SolutionID = @SolutionID
AND Transfert = (SELECT MAX(Transfert) AS Expr1 FROM TABLE_TRANSFERTSOLUTION AS TABLE_TRANSFERTSOLUTION_1))
Vala
Jack, MVP VB NB : Je ne répondrai pas aux messages privés
Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
miikado69
Messages postés11Date d'inscriptionlundi 29 décembre 2003StatutMembreDernière intervention15 avril 2012 30 août 2010 à 11:44
Bonjour merci pour la réponse mais ça ce fonctionne pas (les 2).
mais j'ai fini par trouver:
SELECT MAX(Transfert) AS Expr1
FROM (SELECT SolutionID, Transfert FROM TABLE_TRANSFERTSOLUTION
WHERE (SolutionID = @SolutionID)) AS derivedtbl_1
Je retrouve bien la bonne valeur dans mon code vb, par contre il me met une erreur lorsqu'il trouve une valeur null et
IsDBNull(row.Expr1) et
If Not DBNull.Value.Equals(row.Expr1) ne bloque pas l'erreur,si on peu m'aider.
Miikado
cs_Jack
Messages postés14007Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 31 août 2010 à 09:14
Surprenant que cette syntaxe fonctionne.
Un SELECT en guise de clause FROM, ça m'épate.
Un NULL sur quel champ ?
Erreur ? Laquelle ? lors de la requète ou après, dans ton programme ?
Pourquoi "row.Expr1" ? Tu travailles sur quel type d'objet ?