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 :

Diviser la valeur d'un nombre au prorata des clés étrangères


Sujet :

Requêtes et SQL.

  1. #1
    Membre régulier Avatar de Nerva
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    360
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 360
    Points : 94
    Points
    94
    Par défaut Diviser la valeur d'un nombre au prorata des clés étrangères
    Bonjour.

    Je tourne en rond avec une requête dont voici une copie d'écran :



    AcFK est la clé étrangère, indexée avec doublons.
    Col3 = Col1 + Col2

    Mais, la valeur des enregistrements de Col2 (identiques par FK) est "incorrecte", sauf pour les lignes sans doublons et les zéros.

    Est-il possible, dans une requête sans opérations, de diviser la valeur de Col2 par le nombre de clés étrangères (pour la 1 -> div/4, pour la 6 -> div/2, etc...) ?

    Merci.

  2. #2
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 261
    Points : 19 424
    Points
    19 424
    Billets dans le blog
    63
    Par défaut
    Bonjour,

    A mon avis il faudrait revoir la conception de la requête.

    Sinon, essayer avec une sous-requête avec une expression du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    col2: Requete1.Col2/(select count(AcFK) from Requete1 as R1 where (R1.AcFK=Requete1.AcFK))
    Ici, je considère que la source de la requête "_qryTest" est la requête "Requete1".

    A tester...
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  3. #3
    Membre régulier Avatar de Nerva
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    360
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 360
    Points : 94
    Points
    94
    Par défaut
    Il y a effectivement un os dans la conception de la requête, et ce, pour un seul et unique champ : Col2, dans cet exemple.

    Cette requête a pour base 2 tables : tblOrders et tblOrders_Sub. La première contient le corps de la commande et la seconde les lignes.

    Ici :

    - Dans Col1, on trouve le Total HT de chaque ligne de commande (figurant dans tblOrders_Sub).
    - Dans Col2, on trouve les frais de port (figurant dans tblOrders).
    - Dans Col3, on trouve la somme des deux.

    Et c'est là que ce trouve l'os. Les frais de port sont cumulés pour chaque ligne de commande. Et comme j'essaie de faire les choses avec un minimum de requêtes (dans l'idéal, celle-ci ligne par ligne et une requête de regroupement pour alimenter un formulaire/sous-formulaire), ce n'est pas facile.

  4. #4
    Invité
    Invité(e)
    Par défaut
    bonjour,
    tu nous donnes un tableau de ce que tu obtiens mais nous donner un tableau de ce que tu voudrais obtenir, ne serait pas du luxe!

  5. #5
    Membre régulier Avatar de Nerva
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    360
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 360
    Points : 94
    Points
    94
    Par défaut
    Voici les deux requêtes :

    Code sql : 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
    20
    21
    22
    23
    -- QryOrdersMaster
    SELECT tblOrders.OrId,
    tblOrders_Sub.OrTpet,
    tblOrders_Sub.OrVatRate,
    tblOrders.OrVatRate1,
    tblOrders.OrVatRate2,
    tblOrders.OrDiscountRate,
    [OrTpet]*[OrDiscountRate] AS OrDiscount,
    [OrTpet]-[OrDiscount] AS OrCna,
    tblOrders.OrCashDiscountRate,
    [OrCna]*[OrCashDiscountRate] AS OrCashDiscount,
    [OrCna]-[OrCashDiscount] AS OrNaet,
    tblOrders.OrShipping,
    tblOrders.OrPacking,
    IIf([OrVatRate]=[OrVatRate1],[OrNaet],0) AS OrNtet1,
    IIf([OrVatRate]=[OrVatRate2],[OrNaet]+[OrShipping]+[OrPacking],0) AS OrNtet2,
    [OrNtet1]*[OrVatRate] AS OrVat1,
    [OrNtet2]*[OrVatRate] AS OrVat2,
    [OrVat1]+[OrVat2] AS OrVat,
    [OrNtet1]+[OrNtet2]+[OrVat] AS OrNtit
    FROM tblOrders
    INNER JOIN tblOrders_Sub
    ON tblOrders.OrId = tblOrders_Sub.OrId;

    Code sql : 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
    20
    21
    22
    23
    -- qryOrdersSum
    SELECT qryOrdersMaster.OrId,
    Sum(qryOrdersMaster.OrTpet) AS OrTpet,
    qryOrdersMaster.OrDiscountRate,
    Sum(qryOrdersMaster.OrDiscount) AS OrDiscount,
    Sum(qryOrdersMaster.OrCna) AS OrCna,
    qryOrdersMaster.OrCashDiscountRate,
    Sum(qryOrdersMaster.OrCashDiscount) AS OrCashDiscount,
    Sum(qryOrdersMaster.OrNaet) AS OrNaet,
    qryOrdersMaster.OrShipping,
    qryOrdersMaster.OrPacking,
    Sum(qryOrdersMaster.OrNtet1) AS OrNtet1,
    Sum(qryOrdersMaster.OrNtet2) AS OrNtet2,
    Sum(qryOrdersMaster.OrVat1) AS OrVat1,
    Sum(qryOrdersMaster.OrVat2) AS OrVat2,
    Sum(qryOrdersMaster.OrVat) AS OrVat,
    Sum(qryOrdersMaster.OrNtit) AS OrNtit
    FROM qryOrdersMaster
    GROUP BY qryOrdersMaster.OrId,
    qryOrdersMaster.OrDiscountRate,
    qryOrdersMaster.OrCashDiscountRate,
    qryOrdersMaster.OrShipping,
    qryOrdersMaster.OrPacking;
    Je me suis donc aperçu de ce qui n'allait pas en examinant la seconde requête. OrShipping (et OrPacking également puisque les frais d'emballages sont globaux) est bien paramétré en Regroupement, mais le mal est déjà fait dans la première requête où le montant est multiplié par le nombre de lignes de la commande.

Discussions similaires

  1. Réponses: 4
    Dernier message: 26/03/2014, 15h30
  2. Diviser une valeur en plusieurs valeurs
    Par Pitou5464 dans le forum Access
    Réponses: 11
    Dernier message: 13/09/2006, 12h41
  3. Diviser les valeurs d'un champ
    Par celine86 dans le forum Access
    Réponses: 7
    Dernier message: 14/02/2006, 09h58
  4. [MySQL] Echange de valeurs dont le nombre n'est pas défini
    Par Diafwl dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 31/01/2006, 10h47
  5. Arrondir la valeur d'un nombre
    Par Steph12 dans le forum C++
    Réponses: 12
    Dernier message: 02/03/2005, 19h20

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