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

Développement SQL Server Discussion :

Soustraction de quantité


Sujet :

Développement SQL Server

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mars 2006
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 53
    Points : 30
    Points
    30
    Par défaut Soustraction de quantité
    Bonjour,
    j'ai 2 vues.
    la première
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT référence, Qté, dépot FROM Stock1
    me donne le résultat:
    ref1 |EXT| 225
    ref1 |01| 6575


    j'ai une seconde vue
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select référence, Qté, dépot FROM Stock2
    qui me donne comme résultat
    ref1 |01|575

    Je voudrais faire une requête qui puisse me donné le résultat suivant
    ref1 |EXT| 225
    ref1 |01| 6000

    c'est a dire que je veux soustraire le stock2 du stock1 par dépot

    pouvez vous m'aider?

  2. #2
    Invité
    Invité(e)
    Par défaut
    Ce n'est pas très compliqué. Qu'as-tu essayer de faire ?

  3. #3
    Nouveau membre du Club
    Inscrit en
    Mars 2006
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 53
    Points : 30
    Points
    30
    Par défaut
    Citation Envoyé par 7gyY9w1ZY6ySRgPeaefZ Voir le message
    Ce n'est pas très compliqué. Qu'as-tu essayer de faire ?
    j'ai fait ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT     Vue1.Réf,Vue1.dépot, Vue1.[Qté] - Vue2.Qté AS Qté_totale
    FROM         Vue1 INNER JOIN
                          Vue2 ON Vue1.Réf = Vue2.Réf
    GROUP BY Vue1.Réf, Vue1.dépot, Vue1.[Qté] - Vue2.Qté
    Mais le résultat me donne :
    ref1 |EXT| -350
    ref1 |01| 6000

    en gros je n'arrive pas a soustraire uniquement par dépot. la il me soustrait 500 sur les 2 lignes. Ca doit être tout simple effectivement !

    Clément

  4. #4
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2014
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Août 2014
    Messages : 257
    Points : 395
    Points
    395
    Par défaut
    Et avec un petit case dans ta requête pour le dépot ?

    Du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT     Vue1.Réf,Vue1.dépot, case when Vue1.dépot = 'EXT' THEN Vue1.[Qté] else Vue1.[Qté] - Vue2.Qté AS Qté_totale END
    FROM         Vue1 INNER JOIN
                          Vue2 ON Vue1.Réf = Vue2.Réf
    GROUP BY Vue1.Réf, Vue1.dépot, Vue1.[Qté] - Vue2.Qté

  5. #5
    Membre expérimenté
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Septembre 2016
    Messages
    731
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2016
    Messages : 731
    Points : 1 416
    Points
    1 416
    Par défaut
    Si les données sont dépendantes de la réf et du stock, faut faire une jointure avec la double condition.
    Vu que le couple n'existe pas forcément une jointure externe devrait faire affaire.

    Et pourquoi un group by ???

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT     Vue1.Réf,Vue1.dépot, Vue1.[Qté] - Vue2.Qté AS Qté_totale
    FROM         Vue1 
           LEFT OUTER JOIN
                      Vue2 
          ON Vue1.Réf = Vue2.Réf AND Vue1.depot = vue2.depot
    Le savoir est une nourriture qui exige des efforts.

  6. #6
    Nouveau membre du Club
    Inscrit en
    Mars 2006
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 53
    Points : 30
    Points
    30
    Par défaut
    Merci Michel je pense que c'est la bonne piste, je viens de tester mais le résultat pour le dépot ext me donne NULL
    réf1|01|6000
    réf1|EXT|NULL

    JeanYvette, je ne pense pas que le case soit bon car j'ai volontairement simplifier la requete mais j'ai beaucoup plus de dépot et de cas possible.
    Clément

  7. #7
    Membre expérimenté
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Septembre 2016
    Messages
    731
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2016
    Messages : 731
    Points : 1 416
    Points
    1 416
    Par défaut
    En affichant les colonnes séparément tu verras apparaître l'origine du problème.
    La fonction isnull devrait t'aider.
    Le savoir est une nourriture qui exige des efforts.

  8. #8
    Nouveau membre du Club
    Inscrit en
    Mars 2006
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 53
    Points : 30
    Points
    30
    Par défaut
    Super merci Michel, c'est résolu.

  9. #9
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 801
    Points
    30 801
    Par défaut
    Une autre manière de faire :
    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
    with    ttl
        as  (
                SELECT  Vue1.Réf
                    ,   Vue1.Dépot
                    ,   Vue1.Qté
                FROM    Vue1 
            union all
                SELECT  Vue2.Réf
                    ,   Vue2.Dépot
                    ,   -Vue2.Qté
                FROM    Vue2 
            )
    select  ttl.Réf
        ,   ttl.Dépot
        ,   sum(ttl.Qté)    AS Qté_totale
    from    ttl
    group by ttl.Réf
        ,   ttl.Dépot
    ;
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  10. #10
    Invité
    Invité(e)
    Par défaut
    Elle est orignale ta solution al1_24, je garde ça en mémoire.
    Moi, j'aurais fait banalement comme Michel...

  11. #11
    Membre expérimenté
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Septembre 2016
    Messages
    731
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2016
    Messages : 731
    Points : 1 416
    Points
    1 416
    Par défaut
    Cette solution est super classe !!!
    Elle élimine le coût de l'outer join.

    +1
    Le savoir est une nourriture qui exige des efforts.

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

Discussions similaires

  1. Soustraction d'ensembles
    Par Guizz dans le forum MS SQL Server
    Réponses: 18
    Dernier message: 05/05/2006, 12h37
  2. Récupérer la quantité de ressource disponible (RAM,CPU,HDD)
    Par telecnop dans le forum Programmation et administration système
    Réponses: 11
    Dernier message: 26/10/2005, 13h23
  3. acceder a la quantite de RAM en C/C++
    Par yop solo dans le forum C
    Réponses: 22
    Dernier message: 31/01/2004, 03h26
  4. Vitesse du CPU, quantité de RAM... en C
    Par dclink dans le forum C
    Réponses: 4
    Dernier message: 07/07/2003, 20h48
  5. [Comparatifs] Limites nombres tables et quantité de données
    Par benj63 dans le forum Décisions SGBD
    Réponses: 7
    Dernier message: 13/06/2002, 21h31

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