SELECT dans SELECT

ehochedez
Invité n'ayant pas de compte PHPfrance

06 sept. 2010, 18:06

Bonjour, voici la requête que j'essaie de passer et qui ne fonctionne pas, j'aimerais avoir de l'aide parce que je ne parviens pas à comprendre d'ou vient le problème..


Code : Tout sélectionner

SELECT YEAR(VM.DATEPRISEVENTE) AS ANNEE, MONTH(VM.DATEPRISEVENTE) AS MOIS, SUM(VP.PRIXVENTE) AS PRIXVENTE, FROM TI_VENTEM VM WITH(NOLOCK) INNER JOIN TI_VENTEP VP WITH(NOLOCK) ON VP.VENTEUID = VM.VENTEUID INNER JOIN TM_CONNAISSANCE CON WITH(NOLOCK) ON VM.CLIENTUID=CON.MEMBREUID WHERE VM.DATEPRISEVENTE >= '09/01/2008 00:00:00' AND VM.DATEPRISEVENTE < '09/01/2009 00:00:00' AND CON.MARCHEUID = (SELECT TOP 1 CON.MARCHEUID FROM TM_CONNAISSANCE CO WHERE CO.MEMBREUID=VM.CLIENTUID ORDER BY CO.ANNEE DESC) GROUP BY YEAR(VM.DATEPRISEVENTE), MONTH(VM.DATEPRISEVENTE)


La partie de la requête qui pose problème est celle-ci

Code : Tout sélectionner

AND CON.MARCHEUID = (SELECT TOP 1 CON.MARCHEUID FROM TM_CONNAISSANCE CO WHERE CO.MEMBREUID=VM.CLIENTUID ORDER BY CO.ANNEE DESC)
Si je met directement MARCHEUID='RefDuMarcheUid' alors ça marche
Mais j'ai l'impression que le VM.CLIENTUID dans le SELECT à l'intérieur du SELECT ne passe, il ne récupère pas le VM.CLIENTUID courant de la requête "mère"

Savez-vous comment je peux faire ?

ViPHP
ViPHP | 4039 Messages

06 sept. 2010, 21:50

Code : Tout sélectionner

AND CON.MARCHEUID = (SELECT TOP 1 CON.MARCHEUID FROM TM_CONNAISSANCE CO WHERE CO.MEMBREUID=VM.CLIENTUID ORDER BY CO.ANNEE DESC)
A mon avis, avec un IN, ça devrait marcher mieux. (au fait, le TOP est vraiment nécesaire ?)

Code : Tout sélectionner

AND CON.MARCHEUID IN (SELECT TOP 1 CON.MARCHEUID FROM TM_CONNAISSANCE CO WHERE CO.MEMBREUID=VM.CLIENTUID ORDER BY CO.ANNEE DESC)
Et ceci dit, le SQL se fait très bien en MINUSCULES, c'est plus agréable. :shock: :mrgreen:
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

ehochedez
Invité n'ayant pas de compte PHPfrance

07 sept. 2010, 03:14

Merci Berzemus !

Oui tu as raison je n'y avais pas pensé un IN est certainement bien mieux qu'un =, merci pour cette remarque.
Je suis désolé pour les majuscules, c'est simplement que dans ma boîte toutes les requêtes doivent être écrites en majuscule...

J'ai effectué le changement mais il ne prend toujours pas en compte le

Code : Tout sélectionner

CON.MARCHEUID IN (SELECT TOP 1 CON.MARCHEUID FROM TM_CONNAISSANCE CO WHERE CO.MEMBREUID=VM.CLIENTUID ORDER BY CO.ANNEE DESC)
alors que si j'écrit

Code : Tout sélectionner

CON.MARCHEUID='F0E63F5E-F738-412E-ABAE-48A874C40E07'
la ç a marche correctement..

Je récupére plusieurs marchés avec cette dernière requête donc j'imagine que oui le TOP est obligatoire.

Merci encore pour ton aide

Eric

ehochedez
Invité n'ayant pas de compte PHPfrance

07 sept. 2010, 04:21

Ca y est le problème est résolu, en fait le problème ne venait pas de la syntaxe de ma requête mais de ma compréhension des tables..
Donc il n'y a pas vraiment de réponse à poster désolé.

Merci encore pour otn aide Berzemus !