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 :

Champs absents dans une liste


Sujet :

Langage SQL

  1. #1
    Rédacteur
    Avatar de lavazavio
    Homme Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 673
    Points : 2 412
    Points
    2 412
    Par défaut Champs absents dans une liste
    Bonjour à tous,

    Voila le contexte du problème :
    J'ai une table avec des Références, des Quantités et un champ In/Out qui prend comme valeur soit In soit Out.
    Je cherche à savoir quelle quantitée il me reste en stock. Soit pour chaque Référence, je veux faire les In - les Out.
    Jusque là pas de problème, sauf que dans ma table (et je n'y suis pour rien !), il y a des Références pour lesquelles il n'existe que des In ou des Out mais pas les 2. Du coup, la requete In-Out ne fonctionne pas pour ces Références et dans le résultat de ma requête, il me manque des Références.

    Comment faire pour que ces Références (et les quantités associées bien sur) apparaissent dans le résultat de requête ?

    Merci

    PS : Désolé pour le titre de la discussion, j'étais pas très inspiré

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 861
    Points : 965
    Points
    965
    Par défaut
    Bonjour,

    pourrais-tu nous poster la requête en question?

  3. #3
    Rédacteur
    Avatar de lavazavio
    Homme Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 673
    Points : 2 412
    Points
    2 412
    Par défaut
    Euh, j'ai simplifié la situation pour que ce soit facile à expliquer mais bon, ca change pas grand chose :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT DISTINCT R2.Référence, R1.[Quantité libérée entrée]-R2.[Quantité libérée sortie] AS [Quantitée libérée], R2.Désignation, R2.[Unité], R2.[Seuil de Stock]
    FROM MP_Ref_quantité_libérée_sortie AS R2 LEFT JOIN MP_Ref_quantité_libérée_entrée AS R1 ON R1.Référence = R2.Référence
     
    UNION SELECT DISTINCT R1.Référence, R1.[Quantité libérée entrée]-R2.[Quantité libérée sortie] AS [Quantitée libérée], R1.Désignation, R1.[Unité], R1.[Seuil de Stock]
    FROM MP_Ref_quantité_libérée_entrée AS R1 LEFT JOIN MP_Ref_quantité_libérée_sortie AS R2 ON R1.Référence = R2.Référence;
    Sachant que R1 me retourne la liste des Références et la somme des entrées pour chaque référence et R2 la liste des Références et la somme des sorties pour chaque référence.

    Et une autre chose, quand il n'y a pas à la fois des entrées et des sorties pour une référence, quantitéIn-quantitéOut ne renvoie rien, forcément.
    Il faudrait que j'arrive à dire par exemple : quand il n'y a pas de sortie, mettre la valeur 0 à quantitéOut !

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 861
    Points : 965
    Points
    965
    Par défaut
    Ce que tu utilises dans ta requête sont des vues créés à partir de la table décrite dans ton premier post?
    Si oui, ce serait bien d'avoir la structure de la table, car je pense qu'il y a plus simple que l'utilisation de ces vues. Quelque chose de ce genre, un peu au hasard en l'absence de la description de ta table :
    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
     
    SELECT
    	  R.Référence,
    	  sum(CASE InOut 
    	  	        WHEN 'In' THEN coalesce(quantité,0)
    		        WHEN 'Out' THEN coalesce(-quantité,0)
    	       END) AS [Quantitée libérée],
    	  R.Désignation,
    	  R.[Unité], 
    	  R.[Seuil de Stock]	 
    FROM Ref_quantité_libérée R
    GROUP BY 
    	  R.Référence,
    	  R.Désignation,
    	  R.[Unité], 
    	  R.[Seuil de Stock]

  5. #5
    Rédacteur
    Avatar de lavazavio
    Homme Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 673
    Points : 2 412
    Points
    2 412
    Par défaut
    Oui ce sont des vues mais j'ai pas trop la possibilité de te décrire la structure de la table parce que ces vues sont faites à partir de pas mal de jointures avec d'autres tables et c'est trop vaste pour pouvoir décrire l'ensemble...

  6. #6
    Rédacteur
    Avatar de lavazavio
    Homme Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 673
    Points : 2 412
    Points
    2 412
    Par défaut
    Mais ta réponse me donne une bonne piste, sauf que je suis sous ACCESS et il n'accepte pas les CASE WHEN.
    Je vais regarder du côté de IIF.

  7. #7
    Rédacteur
    Avatar de lavazavio
    Homme Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 673
    Points : 2 412
    Points
    2 412
    Par défaut
    J'avance petit à petit.

    Est-ce que tu vois une façon de faire pour assigner la valeur 0 lorsque si la requete ne renvoie rien ?

    J'ai testé ceci, mais ca ne semble pas fonctionner :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    Sum(IIF(Quantité=Null,0,Quantité)) AS [Quantité libérée sortie]

    Pour info, le champ Quantité est de type integer.

    Merci pour ton aide.

  8. #8
    Rédacteur
    Avatar de lavazavio
    Homme Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 673
    Points : 2 412
    Points
    2 412
    Par défaut
    Bon, il semblerait que je m'en sois sorti en gardant les vues et en ajoutant l'opérateur NZ(,).

    Pour faire hurler les puristes de la requete, je vous montre ce que ca donne :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    SELECT
    DISTINCT R2.Référence, NZ(R1.[Quantité libérée entrée],0)-NZ(R2.[Quantité libérée sortie],0) AS [Quantitée libérée], R2.Désignation, R2.[Unité], R2.[Seuil de Stock]
    FROM MP_Ref_quantité_libérée_sortie AS R2
    LEFT JOIN
    MP_Ref_quantité_libérée_entrée AS R1 ON R1.Référence = R2.Référence
     
    UNION
     
    SELECT
    DISTINCT R1.Référence, NZ(R1.[Quantité libérée entrée],0)-NZ(R2.[Quantité libérée sortie],0) AS [Quantitée libérée], R1.Désignation, R1.[Unité], R1.[Seuil de Stock]
    FROM MP_Ref_quantité_libérée_entrée AS R1
    LEFT JOIN
    MP_Ref_quantité_libérée_sortie AS R2 ON R1.Référence = R2.Référence;

    Merci encore de m'avoir éguillé

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 29/07/2009, 15h31
  2. [MySQL] Modifier champs (choisi dans une liste déroulante)
    Par Destampes_SA dans le forum PHP & Base de données
    Réponses: 14
    Dernier message: 23/06/2009, 14h32
  3. insertion champ utilisateur dans une liste
    Par pizzzz dans le forum SharePoint
    Réponses: 1
    Dernier message: 06/12/2007, 15h48
  4. Réponses: 2
    Dernier message: 29/12/2006, 15h56
  5. Réponses: 3
    Dernier message: 26/09/2006, 11h06

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