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

MS SQL Server Discussion :

SQLSERVER2005 - GROUP BY


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 190
    Par défaut SQLSERVER2005 - GROUP BY
    Bonjour, je cherche depuis 1 heure quelque chose de très simple, mais en vain..

    Avec une requête (qui contient plusieurs étapes), j'obtiens ces résultats :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Select ID, PRODUIT
    FROM MA_TABLE
     
    ID  PRODUIT
    --- -------
    03    B
    02    A
    01    C
    J'aimerai, dans mon étape suivante, n'avoir qu'une seule ligne avec le plus petit ID, comme tel :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ID  PRODUIT
    --- -------
    01    C
    Mais je n'y arrive pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Select MIN(ID), PRODUIT
    FROM MA_TABLE
    GROUP BY ID
     
    ID  PRODUIT
    --- -------
    03    B
    02    A
    01    C

  2. #2
    Membre Expert Avatar de Jinroh77
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2006
    Messages
    1 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Février 2006
    Messages : 1 964
    Par défaut
    Essayez comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    WITH Min (Id) AS (
    SELECT MIN(Id) FROM MA_TABLE
    )
    SELECT ID, PRODUIT
    FROM MA_TABLE tb
    JOIN Min ON Min.Id = tb.Id

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 190
    Par défaut
    Etonnant que cela soit aussi 'compliqué' pour faire si peu..

    Donc, merci Jinroh. Ca fonctionne
    EDIT : ca ne fonctionne pas.. je reviendrai plus tard avec mon exemple plus complet.. sorry
    Maintenant, j'aimerai utiliser ceci pour des reqûetes plus importantes.
    Pourrais-tu m'expliquer le fonctionnement du WITH ? Ou me référer un tuto ?
    Merci d'avance.

  4. #4
    Membre Expert Avatar de Jinroh77
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2006
    Messages
    1 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Février 2006
    Messages : 1 964
    Par défaut
    On peut faire plus simple avec ce genre de chose :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT ID, PRODUIT
    FROM MA_TABLE tb
    WHERE tb.Id = (select MIN(ID) from MA_TABLE)
    mais je trouve ça moins propre.
    Le tout est qu'il faut tout de même parcourir la table pour trouver le MIN de toutes les valeurs.

    Pour le WITH, les Common Table Expression en fait tu trouveras des explications et exemples ici.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 190
    Par défaut
    Je reviens avec mon problème (un rien) plus complexe.

    Voici mon input:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    NAME1 NAME2 ID  PRODUIT
    ----  ----- --- -------
    XXX   ZZZ   03    B
    XXX   ZZZ   02    A
    XXX   ZZZ   01    C
    YYY   ZZZ   05    E
    YYY   ZZZ   03    B
    YYY   ZZZ   02    A
    voila le output que j'aimerai avoir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    NAME1 NAME2 ID  PRODUIT
    ----  ----- --- -------
    XXX   ZZZ   01    C
    YYY   ZZZ   02    A
    En appliquant les deux méthodes plus haut, j'obtiens

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    NAME1 NAME2 ID  PRODUIT
    ----  ----- --- -------
    XXX   ZZZ   01    C
    YYY   ZZZ   01    C
    Comment trouver l'output désiré ?

    Merci d'avance

  6. #6
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Essayez ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    ;With SR (NAME1, NAME2, ID, PRODUIT, RN) as
    (
    select NAME1, NAME2, ID, PRODUIT,
           row_number() over(partition by NAME1 order by ID asc)
      from MaTable
    )
    select NAME1, NAME2, ID, PRODUIT
      from SR
     where RN = 1

  7. #7
    Membre Expert Avatar de Jinroh77
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2006
    Messages
    1 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Février 2006
    Messages : 1 964
    Par défaut
    Plutôt que de donner simplement l'output, essayez de l'expliquer avec vos tables et données réelles.

Discussions similaires

  1. [SQLSERVER2005] Group by + LKE '%'
    Par apnw7931 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 21/04/2011, 15h51
  2. [CR8] Groupes nommés par ordre spécifié
    Par PschittN dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 17/05/2004, 23h46
  3. [RaveReport] - Bloquer groupe sur une page
    Par muaddib dans le forum Rave
    Réponses: 3
    Dernier message: 25/02/2003, 16h21
  4. gestion des groupes
    Par muaddib dans le forum QuickReport
    Réponses: 3
    Dernier message: 31/12/2002, 11h01

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