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 :

Sous requête sql


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 7
    Par défaut Sous requête sql
    bonjour

    Je vous soumet mon problème :

    J'ai deux requêtes qui fonctionnent séparément :
    La première me permet de lister les matériel en stock pour une quantité supérieur à zéro en calculant la valeur d'achat et la valeur de mon stock.
    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
    select   
    	a.consumable_nomination,
    	(b.SumInput - c.SumOutput) As stock,
    	((d.stock_movement_unit_price/d.stock_movement_quantity)*(b.SumInput - c.SumOutput)) as 'valeur stock',
    	(d.stock_movement_unit_price/d.stock_movement_quantity) as 'prix achat'
    	from consumable a join 	_entry_conso b 
    on b.id_consumable=a.id_consumable
    join _exit_conso c
    on c.id_consumable=a.id_consumable
    join consumable_stock_movement e 
    on b.id_consumable=e.id_consumable
    join stock_movement d
    on d.id_stock_movement=e.id_stock_movement
    where (b.SumInput - c.SumOutput)> 0 and d.stock_movement_quantity<>0
    group by e.id_consumable,
    	a.consumable_nomination,
    	a.consumable_nomination,
    	a.consumable_name,
    	(d.stock_movement_unit_price/d.stock_movement_quantity),
    	(b.SumInput - c.SumOutput),
    	(d.stock_movement_unit_price*(b.SumInput - c.SumOutput))
    La deuxième me permet de récupérer la valeur max de mes entrées pour ne prendre que celle-là comme valeur de mon stock.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select  max(d.stock_movement_unit_price),
    		e.id_consumable
    from stock_movement d join consumable_stock_movement e
    on d.id_stock_movement=e.id_stock_movement
    group by e.id_consumable
    La première requète me renvoit toutes les valeurs dont le stock est > 0
    Nom : angélique.PNG
Affichages : 185
Taille : 3,3 Ko

    Je souhaiterais qu'il ne prenne en compte que celle qui a la valeur la plus haute. Je bloque sur ma requête imbriqué qui va lui dire de ne prendre que le prix le plus haut.

    Je vous joint les différentes tables concernés
    Nom : structure.PNG
Affichages : 718
Taille : 46,0 Ko

    Je vous remercie de votre aide

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 640
    Billets dans le blog
    10
    Par défaut
    Bonjour,

    Si je comprends bien le besoin, il suffit d'ajouter votre requête 2 dans la première en utilisant un nouvel alias, puisque la table est déjà utilisée dans la 1ère requête

    Ce qui devrait donner quelque chose comme suit (j'ai pu faire des fautes de frappe, non testé) :

    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
    28
    29
    30
    31
    select a.consumable_nomination
         , (b.SumInput - c.SumOutput)     as stock
         , ( (SUB1.MaxPr/d.stock_movement_quantity)
            *(b.SumInput - c.SumOutput))  as 'valeur stock'
         , (d.stock_movement_unit_price/d.stock_movement_quantity) as 'prix achat'
    From consumable   a 
    join _entry_conso b 
      on b.id_consumable=a.id_consumable
    join _exit_conso c
      on c.id_consumable=a.id_consumable
    join consumable_stock_movement e 
      on b.id_consumable=e.id_consumable
    join stock_movement d
      on d.id_stock_movement=e.id_stock_movement
    -- valorisation du stock
    inner join(select max(SM.stock_movement_unit_price) as MaxPr
                    , CM.id_consumable
               from       stock_movement            SM 
               inner join consumable_stock_movement CM
                  on CM.id_stock_movement=SM.id_stock_movement
               group by CM.id_consumable) SUB1
    --      
    where b.SumInput - c.SumOutput > 0 
      and d.stock_movement_quantity<>0
    group by e.id_consumable
           ,  a.consumable_nomination
           ,  a.consumable_nomination
           ,  a.consumable_name
           , (d.stock_movement_unit_price/d.stock_movement_quantity)
           , (b.SumInput - c.SumOutput)
           , (d.stock_movement_unit_price*(b.SumInput - c.SumOutput))

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 7
    Par défaut
    Hello
    MErci de t'intéresser à mon problème. Je viens de tester ta requête, il me renvoi l'erreur suivante :

    Msg*156, Niveau*15, État*1, Ligne*24
    Syntaxe incorrecte vers le mot clé 'where'.

    Le where qui lui pause problème est celui après le SUB1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    -- valorisation du stock
    inner join(select max(SM.stock_movement_unit_price) as MaxPr
                    , CM.id_consumable
               from       stock_movement            SM 
               inner join consumable_stock_movement CM
                  on CM.id_stock_movement=SM.id_stock_movement
               group by CM.id_consumable) SUB1
    --      
    where b.SumInput - c.SumOutput > 0

  4. #4
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 640
    Billets dans le blog
    10
    Par défaut
    Comme mentionné précédemment, je n'ai bien sur pas créer toutes les tables pour pouvoir tester, il peut donc y avoir quelques fautes de frappe

    Toutefois, la partie qui suit la requête que j'ai ajoutée n'a en principe pas été modifiée, j'ai copié-collé la requête initiale
    EDIT : ah si, les parenthèses ont sauté

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 7
    Par défaut
    Ok merci

    Je reprend ligne à ligne et cherche l'erreur. Merci pour tout

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 7
    Par défaut
    HEllo

    Suite : j'ai repris tout le code et je ne trouve pas l'erreur, de plus après SUB1 j'ai un "tild" rouge (erreur) qui m'indique "expression de type non booléen spécifiée dans un contexte où une condition est attendue", j'ai beau chercher je ne voie pas.
    Nom : angélique.PNG
Affichages : 189
Taille : 9,9 Ko

Discussions similaires

  1. [CS4] Problème de sous-requêtes SQL avec Dreamweaver
    Par WPH2009 dans le forum Dreamweaver
    Réponses: 5
    Dernier message: 01/04/2009, 18h50
  2. UPDATE et sous requêtes SQL 4
    Par Cylie34 dans le forum Langage SQL
    Réponses: 6
    Dernier message: 02/04/2007, 17h07
  3. Sous-requêtes SQL pour ACCESS
    Par bastoon dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 28/08/2006, 21h41
  4. problème sous-requête SQL et order by
    Par aguest dans le forum Requêtes
    Réponses: 10
    Dernier message: 26/12/2005, 23h57
  5. Sous-requêtes SQL
    Par mandrake256 dans le forum WinDev
    Réponses: 6
    Dernier message: 21/06/2005, 10h15

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