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 :

Requete delicate a faire


Sujet :

Langage SQL

  1. #1
    Membre régulier
    Inscrit en
    Mars 2009
    Messages
    191
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 191
    Points : 71
    Points
    71
    Par défaut Requete delicate a faire
    Bonjour tout le monde !!

    Je dois faire une requete qui affiche les différentes lignes d'un achat avec son ou leurs bons de reception rattachés. Voici les différentes possibilités pour une ligne d'achat :
    - toute la quantité est réceptionné sur un bon
    - une partie de la quantité est réceptionné sur un bon et le reste sur un autre voir une partie pas encore réceptionnée
    - la quantité totale n'est pas encore réceptionnée

    J'ai 2 tables qui sont donc concernées : ACHC qui regroupe les lignes d'achat et BDRC qui regroupe les infos sur le bon de reception.
    La requete que j'ai faite fonctionne en partie mais n'affiche pas les quantités qui ne sont pas receptionnées. La voici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select distinct achc.NoLigneAchat as Ligne, achc.IndicateurObjet as Type, achc.CodeFourniPrestto as 'Fourn/Prest', achc.designation1 +',' + achc.designation2 +' ' + achc.designation3 +' ' + achc.designation4 +' ' + achc.designation5 as 'Désignation', achc.Varnumutil2 as 'Qté cdée cond.',achc.Varalphautil as 'U Cond.', CAST(achc.QuantiteCommandee AS varchar(20)) as 'Qté ach.',achc.UniteAchat as 'U Achat', CAST(achc.PrixUnitEnDevise AS varchar(20)) as 'Prix unit', CAST(achc.MtHtRemiseEscomp AS varchar(20)) as 'Mtt HT', achc.DateSouhaiteeplustard as 'Date livraison', achc.ResteRecevoir2 as 'RàR', bdrc.nobonrecepto as 'Numéro de BR', quantiterecue as 'Quantité recue'   
    FROM ACHC left outer join bdrc on achc.numeroachat=bdrc.noconfirmation 
    WHERE numeroachat=@i33101$ order by NoLigneAchat
    Le @i33101$ correspond au numéro d'achat dans mon programme.

    Voyez vous l'erreur que j'aurais commise ?

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 388
    Points
    18 388
    Par défaut
    Comme ça je ne vois rien, mais j'ai peut-être mal compris votre problématique.
    Pouvez-vous essayer de l'illustrer avec quelques exemples ?

  3. #3
    Membre régulier
    Inscrit en
    Mars 2009
    Messages
    191
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 191
    Points : 71
    Points
    71
    Par défaut
    Voici un exemple :

    Je fais un achat de 3 memes articles(art1), j'en receptionne un dans un bon de réception(BR1), le deuxieme dans un autre bon(BR2) et le troisieme je ne l'ai pas encore receptionné.

    Avec ma requete ci dessus je verrai la premiere ligne avec le BR1 et 1 en quantité receptionné, une deuxieme ligne avec le BR2 et 1 en quantité receptionné et c'est tout je ne vois pas ma troisieme ligne qui doit etre vide en dessous la colonne représentant les bons de receptions ce que je désire.

    Peut etre faut il une 2e requete avec un UNION pour voir ce qui est NULL ?

    Merci de votre aide

  4. #4
    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 : 61
    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 048
    Points
    34 048
    Billets dans le blog
    14
    Par défaut
    Pourquoi transformer les quantités en VARCHAR(20) ?

    Et pourquoi avoir fait un DISTINCT ? Chaque correspondance entre noligneachat et nobonrecepto est unique non ?

    Ce qu'il reste à recevoir, c'est la quantité commandée - la quantité déjà reçue :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT a.NoLigneAchat, 
      a.Varnumutil2 - SUM(b.quantiterecue) AS Reste_a_recevoir
    FROM ACHC AS a
    LEFT OUTER JOIN bdrc AS b ON achc.numeroachat = bdrc.noconfirmation
    WHERE numeroachat = @i33101$
    GROUP BY a.NoLigneAchat, a.Varnumutil2
    Une UNION de votre requête avec la mienne devrait vous permettre d'ajouter l'info qu'il vous manque :
    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
    20
    21
    22
    23
    24
    25
    26
    27
    SELECT
      achc.NoLigneAchat AS Ligne, 
      achc.IndicateurObjet AS Type, 
      achc.CodeFourniPrestto AS 'Fourn/Prest', 
      achc.designation1 +',' + achc.designation2 +' ' + achc.designation3 +' ' + achc.designation4 +' ' + achc.designation5 AS 'Désignation', 
      achc.Varnumutil2 AS 'Qté cdée cond.',
      achc.Varalphautil AS 'U Cond.', 
      CAST(achc.QuantiteCommandee AS varchar(20)) AS 'Qté ach.',
      achc.UniteAchat AS 'U Achat', 
      CAST(achc.PrixUnitEnDevise AS varchar(20)) AS 'Prix unit', 
      CAST(achc.MtHtRemiseEscomp AS varchar(20)) AS 'Mtt HT', 
      achc.DateSouhaiteeplustard AS 'Date livraison', 
      achc.ResteRecevoir2 AS 'RàR', 
      bdrc.nobonrecepto AS 'Numéro de BR', 
      bdrc.quantiterecue AS 'Quantité recue'   
      t.Reste_a_recevoir
    FROM ACHC 
    LEFT OUTER JOIN bdrc ON achc.numeroachat = bdrc.noconfirmation 
    INNER JOIN (
      SELECT a.NoLigneAchat, 
        a.Varnumutil2 - SUM(b.quantiterecue) AS Reste_a_recevoir
      FROM ACHC AS a
      LEFT OUTER JOIN bdrc AS b ON achc.numeroachat = bdrc.noconfirmation
      GROUP BY a.NoLigneAchat, a.Varnumutil2
    ) AS t ON ACHC.NoLigneAchat = t.NoLigneAchat
    WHERE numeroachat = @i33101$ 
    ORDER BY NoLigneAchat

Discussions similaires

  1. Requete SQL : comment faire un cumul
    Par yannick069 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 09/04/2015, 13h21
  2. [SQLLite] requete SQL comment faire
    Par babaahmed dans le forum Langage SQL
    Réponses: 8
    Dernier message: 02/06/2006, 17h09
  3. [struts requete sql] comment faire un wait
    Par chouchou93 dans le forum Struts 1
    Réponses: 1
    Dernier message: 15/05/2006, 19h04
  4. requete sql pour faire un classement
    Par beezee dans le forum Langage SQL
    Réponses: 2
    Dernier message: 04/03/2006, 13h03
  5. [SQL] requetes inbriquées, comment faire celle ci??
    Par Devil666 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 20/05/2005, 15h44

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