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] Pb Date et Montant derniere commande


Sujet :

Langage SQL

  1. #1
    Nouveau membre du Club
    Inscrit en
    Juin 2006
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 52
    Points : 28
    Points
    28
    Par défaut [SQL Server] Pb Date et Montant derniere commande
    Bonjour,

    Je bloque sur une problématique date et montant de la derniere commande.

    J'ai 2 tables impliquées dans cette requete, qui doit lister les clients ainsi que leurs coordonnées (depuis une table client) et le montant et la date de la derniere commande (depuis la table commande).

    J'arrive bien à lister les clients avec la date de la derniere commande, mais quand je rajoute le montant à ma requete j'obtiens un msg d'erreur car ma variable n'est pas agrégée.

    Est ce que vous avez une solution à ce pb qui me parait pourtant trivial ?

    Je pensais rajouter le montant et la date de la derniere commande à ma table client mais je sais pas comment m'y prendre.

    Merci d'avance

  2. #2
    Expert confirmé Avatar de Cybher
    Homme Profil pro
    Consultant réseaux et sécurité
    Inscrit en
    Mai 2005
    Messages
    3 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Consultant réseaux et sécurité
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 281
    Points : 4 644
    Points
    4 644
    Par défaut
    peux tu donner la requete que tu as essayé?

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 11
    Points : 14
    Points
    14
    Par défaut
    c'est pas si trivial que ça dans la mesure où effectivement, dès que tu utilises une fonction d'aggrégation en SQL (donc forcément avec la clause GROUP BY), tout valeur retournée dans le SELECT qui n'est pas le résultat d'une fonction d'aggrégation doit être dans le GROUP BY; ce qui ne va pas t'arranger dans ton cas ...

    La solution consiste à identifier PRECISEMENT l'enregistrement (par son numéro d'enregistrement système, comme le ROWID par exemple sur INFORMIX), et d'aller lire les informations voulues une fois l'enreg en question ciblé.

    Dans mon exemple, on dispose des tables cli (no_cli, raison_sociale) et cde(no_cde,no_cli,dte_cde,montant).

    Le script SQL suivant (testé et approuvé sous un INFORMIX 9.40) permet de faire ce que tu veux :

    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
    19
     
    SELECT cli.no_cli,raison_sociale,no_cde,dte_cde,montant
    FROM cde AS cde1, cli 
    WHERE cde1.rowid=(
         -- Identification du dernier enregistrement de la table cde
         -- correspondant au client et à la date de la dernière commande passée
         -- le max(rowid) prévient l'erreur dans le cas où le même client aurait
         -- passé plus d'une commande le même jour (dans ce cas on prend la
         -- dernière enregistrée)
         SELECT max(rowid)
         FROM cde AS cde2
         WHERE dte_cde=(
                 -- Identification de la dernière date de cde pour le client concerné
                 SELECT max(dte_cde)
                 FROM cde
                 WHERE no_cli=cde2.no_cli)
         AND cde2.no_cli=cde1.no_cli)
    AND cde1.no_cli=cli.no_cli
    ORDER BY 1

    Capice ?

  4. #4
    Nouveau membre du Club
    Inscrit en
    Juin 2006
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 52
    Points : 28
    Points
    28
    Par défaut
    Merci pour cette piste. Je vais chercher l'équivalent du Rowid pour sql server et tester tout ca (je vous tiens au courant).

  5. #5
    Nouveau membre du Club
    Inscrit en
    Juin 2006
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 52
    Points : 28
    Points
    28
    Par défaut
    zut, appparemment pas de rowid ou equivalent sur sql server...

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 11
    Points : 14
    Points
    14
    Par défaut
    mmm, ça paraît surprenant !! t'as essayé de demander sur le forum sql server ?

    Sinon, il ne te reste plus qu'à ajouter un identificateur d'enregistrement unique dans tes tables, ce qui est par ailleurs généralement conseillé dans la conception des tables d'une base de données.

    Entre parenthèses, si le champ no_cde dans la tables des commandes garantit l'unicité de ton enregistrement, il suffit de remplacer rowid par no_cde dans le script écrit plus haut, et ça marche !!!

  7. #7
    Nouveau membre du Club
    Inscrit en
    Juin 2006
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 52
    Points : 28
    Points
    28
    Par défaut
    C'est un peu à ca que je pensais : je peux tres bien utiliser mon numero de commande car une commande est unique et elle correspond à un enreg (c'est d'ailleurs la clef primaire de ma table)

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 11
    Points : 14
    Points
    14
    Par défaut
    Citation Envoyé par marman
    C'est un peu à ca que je pensais : je peux tres bien utiliser mon numero de commande car une commande est unique et elle correspond à un enreg (c'est d'ailleurs la clef primaire de ma table)
    OK, j'ai fait un édit de mon post entre temps, mais la soluce est bien là ...

Discussions similaires

  1. [SQL Server 2005] probleme de connexion via commande bcp
    Par nox75 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 29/10/2008, 16h52
  2. sql server et date du system
    Par Romantic_a dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 16/05/2008, 14h09
  3. sql server champ date
    Par Alex35 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 12/12/2007, 13h35
  4. [SQL SERVER] Conversion date en string
    Par taska dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 31/05/2007, 15h26
  5. SQL Server 2000 - Parametrage nom de base commande USE
    Par jjb44 dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 28/02/2006, 17h37

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