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 :

[SQL Server 8] Choisir certain record dans un résultat


Sujet :

Langage SQL

  1. #1
    Membre habitué Avatar de Baquardie
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juillet 2003
    Messages
    267
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : Canada

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

    Informations forums :
    Inscription : Juillet 2003
    Messages : 267
    Points : 144
    Points
    144
    Par défaut [SQL Server 8] Choisir certain record dans un résultat
    Bon. Mon titre n'est peut être pas clair mais je vais tenter de l'être ici.

    Je travaille avec SQL server 8.

    Je dois trouver le prix de produits dans ma table. Notre système ici a deux bases de prix. Méthode 1 et 2. La méthode 1 a priorité sur la méthode 2. Je fais donc deux requêtes, pour chacune des méthodes, que je join avec un UNION, comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    select groupe, methode, prix
    from table_name
    where methode = 1 
    UNION
    select groupe, methode, prix
    from table_name
    where methode = 2
    Ca semble pareil mais dans la réalité je n'ai pas le choix de faire deux requêtes séparées (pas les mêmes JOIN selon la méthode)

    Bref, cet union me renvoie la combinaison de prix par groupe pour chacune des méthodes s'il y a lieu :

    Groupe......Methode.....Prix
    13...........1...............17.58
    13...........2...............12.45
    15...........2...............18.97

    Maintenant, ce que j'aimerais faire, c'est d'utiliser cette résultante afin d'obtenir le bon prix pour chacun des groupes. Donc dans mon exemple, j'aimerais obtenir ceci :

    Groupe......Methode.....Prix
    13...........1...............17.58
    15...........2...............18.97

    J'ai essayé de faire un min

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select groupe, min(methode), prix
    from
    (
    ma_requete_precedente
    ) as Test group by groupe, prix
    Mais inévitablement ça ne me renvoit pas le bon prix.

    La fonction TOP ne fait que retourner le premier enregistrement, j'aurais bien aimé que ceci fonctionne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select top 1 groupe, prix
    from
    (
    ma_requete_precedente
    ) as Test
    parce que tout ce que je veux, c'est le premier enregistrement trouvé par groupe.

    Vous avez une idée de comment aborder le problème? J'aimerais éviter d'utiliser les tables temporaires (avec les tables # ca serait hyper facile).

    Merci pour vos idées c'est toujours grandement apprécié
    Rien n'est impossible à celui qui n'a pas à le faire
    DBA. Je travaille avec SQL-9, SQL-10

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 5
    Points : 6
    Points
    6
    Par défaut
    Ba pour prendre le 1er enregistrement sans interesser aux autres, je pense que si tu ferais un GROUP BY normalement sa fonctionnera
    GROUP BY et tout les champ du select non calculés.
    voila

  3. #3
    Membre habitué Avatar de Baquardie
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juillet 2003
    Messages
    267
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : Canada

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

    Informations forums :
    Inscription : Juillet 2003
    Messages : 267
    Points : 144
    Points
    144
    Par défaut
    Ça ne fonctionne pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    select groupe, methode, prix
    from
    (
    requête précédente
    )
    group by groupe, methode
    me retourne nécessairement l'erreur

    Server: Msg 8120, Level 16, State 1, Line 3
    Column 'prix' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
    et si je group by sur le prix, ca me retourne tous les enregistrements, et me voilà de retour à la case départ
    Rien n'est impossible à celui qui n'a pas à le faire
    DBA. Je travaille avec SQL-9, SQL-10

  4. #4
    Membre expert
    Avatar de TheLeadingEdge
    Inscrit en
    Mai 2005
    Messages
    1 199
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 1 199
    Points : 3 103
    Points
    3 103
    Par défaut
    Bonjour,

    Et si tu filtres ta 2nd requete pour ne ramener que les groupes sans prix encore ?
    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
    SELECT  	groupe,
    	methode,
    	prix
    FROM	Latable
    WHERE	methode = 1
    UNION
    SELECT  	groupe,
    	methode,
    	prix
    FROM	Latable M2
    WHERE	methode = 2
    AND 	NOT EXISTS
    (
    SELECT  1
    FROM	Latable
    WHERE	methode = 1
    AND 	groupe = M2.groupe
    )

  5. #5
    Membre habitué Avatar de Baquardie
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juillet 2003
    Messages
    267
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : Canada

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

    Informations forums :
    Inscription : Juillet 2003
    Messages : 267
    Points : 144
    Points
    144
    Par défaut


    Oh yeah.... c'est super cela fonctionne! J'ai du bizounner un peu plus, parce que mon from table est composé d'un paquet de join (4) mais en nommant chaque table d'un alias unique, ça fonctionne A1! C'est une grosse requête mais elle fonctionne!

    TheLeadingEdge !
    Rien n'est impossible à celui qui n'a pas à le faire
    DBA. Je travaille avec SQL-9, SQL-10

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 5
    Points : 6
    Points
    6
    Par défaut
    oui c vré c bien joué car jevé reflechi pa mal de tps dessus sans succès et sans penser a cette solution pa tre compliké pourtant!

  7. #7
    Membre habitué Avatar de Baquardie
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juillet 2003
    Messages
    267
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : Canada

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

    Informations forums :
    Inscription : Juillet 2003
    Messages : 267
    Points : 144
    Points
    144
    Par défaut
    Merci de ton aide pareil IG2da
    Rien n'est impossible à celui qui n'a pas à le faire
    DBA. Je travaille avec SQL-9, SQL-10

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 5
    Points : 6
    Points
    6
    Par défaut
    de rien

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 06/12/2006, 11h44
  2. [SQL Server] Donnee de type text dans un GROUP BY non permis
    Par Tartenpion dans le forum Langage SQL
    Réponses: 5
    Dernier message: 06/03/2006, 17h31
  3. Réponses: 3
    Dernier message: 10/08/2005, 11h11
  4. [SQL server] Comment Fusionner des données dans une requête
    Par MoTUmBo dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 27/07/2005, 15h24
  5. [SQL Server] Passage d'un paramètre dans une procédure
    Par navis84 dans le forum Bases de données
    Réponses: 3
    Dernier message: 14/01/2005, 13h19

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