IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement SQL Server Discussion :

probleme avec la clause group by


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de kodo
    Profil pro
    Chef de projet technique
    Inscrit en
    Mars 2006
    Messages
    300
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations professionnelles :
    Activité : Chef de projet technique

    Informations forums :
    Inscription : Mars 2006
    Messages : 300
    Par défaut probleme avec la clause group by
    Bonjour tout le monde,
    voila la structure de mes tables de ma base de donnée :
    Table01 :
    id | num |taux

    la table Table02 contient les num qui sont en double dans la table Table01 .

    Table02 :
    num |nbrDoublons

    je cherche à écrire une requête sql qui permet de me retourner l'id, le num, et le min(taux) des lignes qui se répètent dans la table Table01.

    voila la requête que j'ai écrit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT     t.id, t.num, MIN(t.taux) AS Expr1
    FROM         Table01 t INNER JOIN
                          Table02 c ON t.num = c.num
    GROUP BY t.id, t.num
    Mais ça me retourne les doublons aussi, et ne me retourne pas juste les lignes avec le min, mais avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT     t.num, MIN(t.taux) AS Expr1
    FROM         Table01 t INNER JOIN
                          Table02 c ON t.num = c.num
    GROUP BY t.num
    ça me donne le bon résultat.

    pouvez vous me dire ce que je dois modifier ma première requête pour avoir le bon résultat ?

    Merci de votre aide

  2. #2
    Expert confirmé
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Par défaut
    Votre regroupement n'est pas bon.
    Avec votre requête vous voulez pour chaque regroupement de colonne [id] et colonne [num] la valeur minimale de [taux]. Or ici la colonne [id] change tout le temps donc chaque regroupe de [id] et de [num] sera différent unique à chaque fois.

    Essayez ceci (une solution parmi tant d'autres) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    WITH CTE
    AS
    (
     SELECT 
      ROW_NUMBER() OVER(PARTITION BY t.num ORDER BY t.id, t.num, t.taux) AS [order],
      t.id,
      t.num,
      t.taux
     FROM  Table01 t 
    INNER JOIN Table02 c 
     ON t.num = c.num
    )
    SELECT 
     id,
     num,
      taux
    FROM CTE
    WHERE [order] = 1;
    ++

  3. #3
    Membre averti
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Mai 2011
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Mai 2011
    Messages : 41
    Par défaut
    ESt-ce qu'une requête du type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT	[ID], Table01.NUM, MIN_TAUX
    FROM	(SELECT Table01.NUM, MIN(TAUX) AS MIN_TAUX
    	FROM	Table01
    		INNER JOIN Table02 ON Table01.NUM = Table02.NUM
    	GROUP BY Table01.NUM) cherche_min
    	INNER JOIN Table01 ON cherche_min.NUM = Table01.NUM
    apporte le résultat escompté ?

Discussions similaires

  1. probleme avec la clause group by
    Par kroma23 dans le forum Bases de données
    Réponses: 4
    Dernier message: 10/12/2012, 11h10
  2. [AC-2003] Problème avec la clause "Group By"
    Par tarbala dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 01/08/2009, 17h53
  3. Probleme avec la clause SELECT DISTINCT
    Par jojodid dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 06/05/2008, 14h12
  4. Probleme avec la clause WHERE
    Par funkyjul dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 30/03/2008, 14h21
  5. Requête SQL - Pb avec la clause GROUP BY
    Par jeromesco dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 10/07/2006, 09h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo