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

Langage SQL Discussion :

Sélection d'une table avec limitation de résultat par colonne


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mars 2006
    Messages : 20
    Points : 41
    Points
    41
    Par défaut Sélection d'une table avec limitation de résultat par colonne
    Bonjour,

    Je veux récupérer les éléments d'une table en limitant le résultat par 5 et en groupant par colonne et en triant par deux collones.
    Je suis sous MSSQL 2012.
    exemple: afficher 2 nom par ville
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    id	|nom  	| ville
    1	|nom1	|paris
    2	|nom2	|marseille
    3	|nom3	|lyon
    4	|nom4	|montpellier
    5	|nom5	|marseille
    6	|nom6	|marseille
    7	|nom7	|paris
    8	|nom8	|montpellier
    9	|nom9	|nice
    10	|nom10	|bordeaux
    11	|nom11	|nice
    12	|nom12	|paris
    Le résultat souhaité: 2 par ville trié par ville
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    id	|nom  	| ville
    10	|nom10	|bordeaux
    3	|nom3	|lyon
    2	|nom2	|marseille
    5	|nom5	|marseille
    4	|nom4	|montpellier
    8	|nom8	|montpellier
    9	|nom9	|nice
    11	|nom11	|nice
    1	|nom1	|paris
    7	|nom7	|paris
    la requete suivante donne uniquement 2 résultats.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT TOP 2 *
      FROM maTable
      order by ville, nom
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    id	|nom  	| ville
    10	|nom10	|bordeaux
    3	|nom3	|lyon
    Avez-vous une idée de comment faire?
    Merci par avance.

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 247
    Points : 12 885
    Points
    12 885
    Par défaut
    Bonjour,
    Pour une ville donnée, qu'est-ce qui fait qu'une ligne est gardée, et une autre écartée par la requête ?

    Tatayo.

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mars 2006
    Messages : 20
    Points : 41
    Points
    41
    Par défaut
    Bonjour,

    Justement on veut avoir toute les ville triée par ordre croissant mais que deux résultats par ville.

    Cordialement,
    Jamy.

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 247
    Points : 12 885
    Points
    12 885
    Par défaut
    Ca, on l'avait compris.
    Mais par exemple pour Marseille, quel critère permet de ne prendre que 2 lignes sur les 3 ?

    Tatayo.

  5. #5
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mars 2006
    Messages : 20
    Points : 41
    Points
    41
    Par défaut
    TOP 2 permet de prendre uniquement les deux premières après tri par nom croissant.
    Jamy.

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 247
    Points : 12 885
    Points
    12 885
    Par défaut
    TOP permet de prendre les deux premières lignes d'un résultat.
    Mais il n'est pas du tout relationnel.

    Trier est une chose, filtrer une autre.
    Donc ici, je persiste: pour une ville, tu as 5 lignes. Tu n'en veux que 2. Mais lesquelles ? Quel(s) critère(s) permet de sélectionner 2 lignes et d'évincer les 3 autres ?
    Tant que tu n'a pas répondu à cette simple question, personne ici ne pourra t'aider.

    Tatayo.

  7. #7
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mars 2006
    Messages : 20
    Points : 41
    Points
    41
    Par défaut
    Top permet de prendre les deux premières ligne d'un select.
    maintenant si je trie par nom j'aurai les deux lignes triées.

    exemple:
    select * from maTable where ville='marseille'
    id |nom | ville
    2 |nom55 |marseille
    5 |nom56 |marseille
    6 |nom21 |marseille

    select top 2 * from maTable where ville='marseille' order by nom asc
    id |nom | ville
    6 |nom21 |marseille
    2 |nom55 |marseille

    Je ne vois pas ou est ton blocage.

    Jamy.

  8. #8
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,

    tatayo cherche à savoir quelle ligne vous voulez garder, quelle regle vous permet de savoir quelles sont les deux lignes qu'il faut garder quand il y en a plus que deux pour une ville donnée.

    Dans votre dernier exemple : pourquoi garder nom21 et nom55 et evincer nom56 ? pourquoi ne pas évincer nom55, ou nom 21.

    D'après votre exemple, vous voulez les deux premiers par ordre alphabétique, ce qui donnerait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    WITH CTE AS (
        SELECT id, nom, ville , ROW_NUMBER() OVER(PARTITION BY Ville ORDER BY Nom) AS RN
    )
    SELECT id, nom, ville
    FROM CTE
    WHERE RN < 3

  9. #9
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mars 2006
    Messages : 20
    Points : 41
    Points
    41
    Par défaut
    Bonjour aieeeuuuuu,
    Merci de votre réponse.
    ça répond à mon besoin.
    Dans mon exemple j'ai gardé nom21 et nom55 car trié par ordre alphabétique.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Créer une table avec un grand nombre de colonnes
    Par mouky66 dans le forum SQL Procédural
    Réponses: 6
    Dernier message: 06/10/2011, 10h50
  2. Réponses: 1
    Dernier message: 08/05/2009, 13h19
  3. Remplir une table avec le résultat d'une instruction SQL
    Par jbeu dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 02/09/2007, 23h49
  4. Réponses: 11
    Dernier message: 14/03/2007, 10h13
  5. comment filtrer une table avec deux criteres càd 2 colonnes
    Par athmane2dz dans le forum Bases de données
    Réponses: 7
    Dernier message: 28/07/2004, 15h25

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