Partage
  • Partager sur Facebook
  • Partager sur Twitter

Requête Sql très importante

Sql Server

Sujet résolu
    2 juin 2011 à 11:33:07

    Bonjour,
    J'essaie de faire une jointure depuis quelques jours sans succès.
    voici mes deux tables : facture, change
    L'objectif consiste à remplir les deux champs MONT_HT_DZD et MONT_TTC_DZD de la table facture.
    - Les factures viennent en devise (EURO, CAD, USD, FCFA), et on doit les convertir en monnaie local "DZD" sachant que le taux de change se varie selon la date de la facture.
    donc pour avoir le résultat on doit faire une jointure via la colonne COD_MON, et on doit vérifier que la date de la facture se situe entre 'DATE_DEB' et 'DATE_FIN'. ce que j'arrive pas a faire!!
    Voici ma requête:
    SELECT COD_MON, DATE_FACT, MONT_HT, MONT_HT * (SELECT TX_CHANGE FROM Facture JOIN CHANGE ON (Facture.COD_MON = CHANGE.COD_MON AND DATE_FACT BETWEEN CHANGE.DATE_DEB AND CHANGE.DATE_FIN)) AS 'MONT_HT_DZD', MONT_TTC,MONT_TTC * (SELECT TX_CHANGE FROM Facture_FUEL JOIN CHANGE ON (Facture.COD_MON = CHANGE.COD_MON AND DATE_FACT BETWEEN CHANGE.DATE_DEB AND CHANGE.DATE_FIN)) AS 'MONT_TTC_DZD' FROM Facture
    

    Si quelqu'un peut m'aider s'il vous plaît!!

    table : facture
    Image utilisateur

    table : change
    Image utilisateur
    • Partager sur Facebook
    • Partager sur Twitter
      2 juin 2011 à 12:29:32

      Bonjour
      1er jet!
      SELECT COD_MON, DATE_FACT, MONT_HT, MONT_HT * TX_CHANGE AS 'MONT_HT_DZD', 
      MONT_TTC ,MONT_TTC * TX_CHANGE AS 'MONT_TTC_DZD' 
      FROM Facture AS f
      JOIN Change AS c ON (f.COD_MON = c.COD_MON AND f.DATE_FACT BETWEEN c.DATE_DEB AND c.DATE_FIN)
      

      Je ne sais pas si on a le droit de mettre 2 conditions dans la clause ON, ni si le BETWEEN est autorisé, sinon voila un 2e test :)
      SELECT COD_MON, DATE_FACT, MONT_HT, MONT_HT * TX_CHANGE AS 'MONT_HT_DZD', 
      MONT_TTC ,MONT_TTC * TX_CHANGE AS 'MONT_TTC_DZD' 
      FROM Facture AS f
      JOIN Change AS c ON f.COD_MON = c.COD_MON 
      WHERE f.DATE_FACT BETWEEN c.DATE_DEB AND c.DATE_FIN
      

      au moins l'un des 2 devrait marcher.
      • Partager sur Facebook
      • Partager sur Twitter
        2 juin 2011 à 12:41:46

        > Je ne sais pas si on a le droit de mettre 2 conditions
        > dans la clause ON, ni si le BETWEEN

        oui et oui

        par contre attention, tes colonnes de date ont l'air d'être en DATETIME (et pas en DATE) d'après l'affichage (il met les heures) donc si par hasard plus tard tu rajoutes l'heure à la date de la commande, les commandes du dernier jour du mois ne pourront pas être traitées.
        • Partager sur Facebook
        • Partager sur Twitter
          2 juin 2011 à 12:52:15

          ha bon? il faudrait une DATE_FIN avec l'heure = 23:59:59 je suppose ! :D
          • Partager sur Facebook
          • Partager sur Twitter
            2 juin 2011 à 12:57:36

            Ouais mais même pas, il suffit que quelqu'un passe une commande à 23:59:59.500 (lol).

            Normalement on met la date de début incluse, la date de fin exclue (donc le mois de janvier c'est 01-01-2000 -- 01-02-2000) et on remplace BETWEEN par un >= debut et < fin.

            Accessoirement c'est facile de vérifier qu'il y a pas de trou dans ta table de changes puisque la date de fin de la période N correspond à la date de début de la période N+1.
            • Partager sur Facebook
            • Partager sur Twitter
              2 juin 2011 à 14:07:49

              Merci les amis pour votre aide.
              Pour la date, j'utilise pas l'heure et sa pose pas problème du tout.
              La requête fonctionne correctement.
              Merci.
              • Partager sur Facebook
              • Partager sur Twitter

              Requête Sql très importante

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown