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 :

Problème de jointure


Sujet :

Langage SQL

  1. #1
    Membre éclairé Avatar de Le Pharaon
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 880
    Points : 742
    Points
    742
    Par défaut Problème de jointure
    T_Bon(idBon,RefBon,DateBon,idPrestataire)

    T_PRestation(idBon,idTypePrestation,Pu,Quantite)

    T_Taux(idTaux,Taux,DateValidite)

    T_TypePrestation(idTypePrestation,TypePrestation)

    T_TauxPrestation(idTaux,idTypePrestation)

    Pièce jointe 2802

    L'objectif est de savoir selon la date du bon le taux à appliquer le sur produit pour avoir quelque chose comme la ligne suivante.

    RefBon --- DateBon --- PU --- Quantite --- PU x Quantite x Taux

    Le taux à appliquer est celui qui a la plus petite date de validité >= à la date du bon (refBon).
    Scuse me while I kiss the sky ! Jimi Hendrix

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 810
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 810
    Points : 52 865
    Points
    52 865
    Billets dans le blog
    5
    Par défaut
    Commencez par définir une vue comme ceci :

    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
    CREATE TABLE T_TAUX_TAX
    (TAX_ID INTEGER NOT NULL PRIMARY KEY,
     TAX_DATE_DEBUT DATETIME NOT NULL,
     TAX_TAUX FLOAT NOT NULL)
     
    INSERT INTO T_TAUX_TAX VALUES (1, '20040101', 123.45)
    INSERT INTO T_TAUX_TAX VALUES (2, '20050915', 129.99)
    INSERT INTO T_TAUX_TAX VALUES (3, '20060101', 130.50)
     
    CREATE VIEW V_TAUX_TAX
    AS
    SELECT T1.TAX_ID, T1.TAX_DATE_DEBUT AS TAX_DATE_DEBUT, 
                      COALESCE(MIN(T2.TAX_DATE_DEBUT), '99991231') AS TAX_DATE_FIN,
           T1.TAX_TAUX
    FROM  T_TAUX_TAX T1
          LEFT OUTER JOIN T_TAUX_TAX T2
               ON T1.TAX_DATE_DEBUT < T2.TAX_DATE_DEBUT
    GROUP BY T1.TAX_ID, T1.TAX_DATE_DEBUT, T1.TAX_TAUX
    Vos requêtes vont alors devenir triviales :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    TAX_ID      TAX_DATE_DEBUT                                         TAX_DATE_FIN                                           TAX_TAUX                                              
    ----------- ------------------------------------------------------ ------------------------------------------------------ ----------------------------------------------------- 
    1           2004-01-01 00:00:00.000                                2005-09-15 00:00:00.000                                123.45
    2           2005-09-15 00:00:00.000                                2006-01-01 00:00:00.000                                129.99000000000001
    3           2006-01-01 00:00:00.000                                9999-12-31 00:00:00.000                                130.5
    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Membre éclairé Avatar de Le Pharaon
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 880
    Points : 742
    Points
    742
    Par défaut
    je m'excuse de ne pas avoir précisé la base de données. Je suis sous Access 2003
    Scuse me while I kiss the sky ! Jimi Hendrix

  4. #4
    Membre éclairé Avatar de Le Pharaon
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 880
    Points : 742
    Points
    742
    Par défaut
    J'ai maintenant avancé dans un sens en créant deux sous-requetes pour rendre le problème moins compliqué.

    V_BonPrestation(RefBon, DateBon, PU,QUantite,idTypePrestation)

    V_TauxPrestation(idTypePrestation,TypePrestation,Taux,DateValidite)


    Nota

    L'objectif est de savoir selon la date du bon le taux à appliquer le sur produit pour avoir quelque chose comme la ligne suivante.

    RefBon --- DateBon --- PU --- Quantite --- PU x Quantite x Taux

    Le taux à appliquer est celui qui a la plus petite date de validité >= à la date du bon (DateBon).
    Scuse me while I kiss the sky ! Jimi Hendrix

  5. #5
    Membre éclairé Avatar de Le Pharaon
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 880
    Points : 742
    Points
    742
    Par défaut
    Ca marche j'ai trouvé
    Scuse me while I kiss the sky ! Jimi Hendrix

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

Discussions similaires

  1. Problème de jointure de tables
    Par AurelBUD dans le forum Langage SQL
    Réponses: 6
    Dernier message: 20/04/2005, 16h27
  2. Probléme de jointure
    Par Ajrarn dans le forum Langage SQL
    Réponses: 14
    Dernier message: 24/02/2005, 14h57
  3. Vraisemblable problème de jointure
    Par pimousse76 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 23/02/2005, 15h34
  4. [MS Access] Problème de jointure
    Par Erakis dans le forum Langage SQL
    Réponses: 3
    Dernier message: 07/02/2005, 21h15
  5. Problème de jointure ?!
    Par ebaynaud dans le forum Langage SQL
    Réponses: 8
    Dernier message: 03/11/2004, 11h27

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