SELECT dans SELECT

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : SELECT dans SELECT

[RESOLU] Re: SELECT dans SELECT

par ehochedez » 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 !

Re: SELECT dans SELECT

par ehochedez » 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

Re: SELECT dans SELECT

par Berzemus » 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:

SELECT dans SELECT

par ehochedez » 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 ?