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

Requêtes et SQL. Discussion :

informations supplémentaires dans une requête SQL


Sujet :

Requêtes et SQL.

  1. #1
    Nouveau membre du Club
    Étudiant
    Inscrit en
    Janvier 2008
    Messages
    29
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2008
    Messages : 29
    Points : 27
    Points
    27
    Par défaut informations supplémentaires dans une requête SQL
    Bonjour,

    Voici le problème qui ce pose à moi :
    J'ai une table COMPTI et un table SALARIE. La table COMPTI possède en clef étrangère, l'identifiant du salarié.

    Les données dans la table COMPTI commence à partir de l'année 2004 et ce jusqu'à aujourd'hui.


    je souhaiterai faire une requête permettant d'afficher le solde de chaque salarié pour chaque année.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT COMPTI.SAL_ID, 
      Sum([COMPTI_CREDIT]-[COMPTI_DEBIT]) AS Difference, 
      Year([COMPTI_DATESAISIE]) AS annee
    FROM SALARIE 
    LEFT JOIN COMPTI ON SALARIE.SAL_ID = COMPTI.SAL_ID
    WHERE (((year(COMPTI.COMPTI_DATESAISIE)) Between 2004 And Year(Now())))
    GROUP BY COMPTI.SAL_ID, Year([COMPTI_DATESAISIE]);
    La requête fonctionne bien seulemenent si un salarié n'as aucune écriture dans une année, le solde de cette année n'est retourné. De plus si un salarié arrive à partir de l'année 2006, je n'arrive pas à afficher le solde des années 2004 et 2005 (je souhaiterai que par défaut ça soit solde de l'année précédente ou 0 si il n'y a aucun enregistrement).


    Aurai vous une idée ?

    Merci

  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Si tu veux afficher des lignes pour des années susceptibles de n'en pas avoir, il te faut une table des années et faire une jointure externe à partir de celle-ci.

    Quel SGBD ?

    Pourquoi le nom de certaines colonnes est-il entre crochets ?

    Pourquoi tant de parenthèses dans la clause WHERE ?

    Ça sent l'Access ça non ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Nouveau membre du Club
    Étudiant
    Inscrit en
    Janvier 2008
    Messages
    29
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2008
    Messages : 29
    Points : 27
    Points
    27
    Par défaut
    Oui tout à fait ç'est de l'Access... (et merci de ta réponse)

  4. #4
    Nouveau membre du Club
    Étudiant
    Inscrit en
    Janvier 2008
    Messages
    29
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2008
    Messages : 29
    Points : 27
    Points
    27
    Par défaut
    Le problême avec ta solution c'est que je vais devoir étres obliger de rajouter une table "annee" et ajouter une clef étrangère en plus dans la table COMPTI sur l'identifiant de la table "annee"... Il faudra ensuite que j'ajoute les bons identifiants de la table "annee" à la table COMPTI...

  5. #5
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Non, une année est un nombre entier ; pas besoin d'identifiant pour les années, leur valeur suffit.

    Ensuite tu peux faire une jointure externe de cette table des années avec YEAR(COMPTI_DATESAISIE).

    Essaie ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT c.SAL_ID, 
      SUM(c.COMPTI_CREDIT - c.COMPTI_DEBIT) AS Difference, 
      YEAR(c.COMPTI_DATESAISIE) AS Annee
    FROM SALARIE AS s
    LEFT JOIN COMPTI AS c ON s.SAL_ID = c.SAL_ID
      RIGHT JOIN ANNEE AS a ON a.ANNEE = YEAR(c.COMPTI_DATESAISIE)
    WHERE year(COMPTI.COMPTI_DATESAISIE) BETWEEN 2004 AND YEAR(NOW())
    GROUP BY c.COMPTI.SAL_ID, YEAR(c.COMPTI_DATESAISIE)
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  6. #6
    Nouveau membre du Club
    Étudiant
    Inscrit en
    Janvier 2008
    Messages
    29
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2008
    Messages : 29
    Points : 27
    Points
    27
    Par défaut
    J'ai modifier la requête,

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT COMPTI.SAL_ID, Sum([COMPTI_CREDIT]-[COMPTI_DEBIT]) AS solde, Year([COMPTI_DATESAISIE]) AS annee
    FROM SALARIE
        LEFT JOIN COMPTI ON (SALARIE.SAL_ID = COMPTI.SAL_ID)
        RIGHT JOIN ANNEE ON (ANNEE.annee = YEAR(COMPTI.COMPTI_DATESAISIE))
    WHERE (Year([COMPTI].[COMPTI_DATESAISIE]) Between 2004 And Year(Now()))
    GROUP BY COMPTI.SAL_ID, YEAR(COMPTI_DATESAISIE);
    malheuresement j'ai encore un erreur :
    Erreur de syntaxe opérateur absent dans l'expression "(SALARIE.SAL_ID = COMPTI.SAL_ID) RIGHT JOIN ANNEE on (ANNEE.annee = YEAR(COMPTI.DATESAISIE) "

  7. #7
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Je crains que cette erreur soit due à la manière bizarre d'Access pour écrire les requêtes avec plus d'une jointure.
    Essaie de construire la requête en mode graphique pour avoir la syntaxe Access des jointures.

    De mémoire, ça donnerait un truc dans ce genre là, avec moult parenthèses (il en manque sûrement un paquet dans ma tentative ci-dessous) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    LEFT JOIN COMPTI 
      (RIGHT JOIN ANNEE ON (ANNEE.annee = YEAR(COMPTI.COMPTI_DATESAISIE))
      ON (SALARIE.SAL_ID = COMPTI.SAL_ID)
    Je te renvoie sur les spécialistes d'Access pour cette syntaxe hors norme.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  8. #8
    Modérateur
    Avatar de Chtulus
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2008
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 3 094
    Points : 8 678
    Points
    8 678
    Par défaut
    Bonsoir,

    Citation Envoyé par CinePhil
    Je crains que cette erreur soit due à la manière bizarre d'Access....
    Oui , rien que cela suffit !

    @tripless

    Access pur ???
    « Je ne cherche pas à connaître les réponses, je cherche à comprendre les questions. »
    - Confucius -

    Les meilleurs cours, tutoriels et Docs sur les SGBD et le SQL
    Tous les cours Office
    Solutions d'Entreprise



Discussions similaires

  1. [MySQL] Erreur dans une requête sql
    Par Goundy dans le forum PHP & Base de données
    Réponses: 37
    Dernier message: 30/01/2006, 16h08
  2. [SQL] Récupérer des variables de formulaire dans une requête SQL
    Par psychoBob dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 22/11/2005, 18h44
  3. Plusieurs jointures dans une requête sql
    Par Pero dans le forum Langage SQL
    Réponses: 3
    Dernier message: 21/09/2005, 20h59
  4. Nom de champ variable dans une requête SQL
    Par stip dans le forum ASP
    Réponses: 2
    Dernier message: 30/09/2004, 18h02
  5. Utilisation de MAX dans une requête SQL
    Par Evil onE dans le forum Langage SQL
    Réponses: 7
    Dernier message: 15/06/2004, 18h38

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