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 :

Créer une sous-requête


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Alimentation

    Informations forums :
    Inscription : Avril 2015
    Messages : 38
    Points : 13
    Points
    13
    Par défaut Créer une sous-requête
    Bonjour,

    Je dispose de 2 tables :
    L’une nommée TABLE_ARTICLE contenant :

    Code article : CODE
    Libellé article : LIBELLE


    L’autre nommée TABLE_PRIX

    Code article : CODE_P
    Prix de revient : PR
    Prix de cession : PUG
    Date de commande : DATE_C
    Date de livraison : DATE_L

    Je souhaiterai étudier les écarts des prix PR et PUG entre la date de commande et la date de livraison.
    Je voudrais donc avoir 2 colonnes PR et 2 colonnes PUG avec l’une en date de livraison et l’une en date de commande.
    PR dépendant de DATE_C
    PR_1 dépendant de DATE_L

    et
    PUG dépendant de DATE_C
    PUG_1 dépendant de DATE_L

    Je pense qu’il faut créer une sous table mais je ne sais pas faire malgré plusieurs recherches.
    Voici mon code :
    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
    SELECT 
    	CODE;
    	LIBELLE;
    	PR;
    	PR_1;
    	PUG;
                  PUG_1 ;
    	DATE_C;
    	DATE_L;
    FROM 
    	EURPRD1.FIC730.TABLE_ARTICLE TABLE_ARTICLE ;  
    	EURPRD1.FIC730.TABLE_PRIX TABLE_PRIX 
    WHERE 
    	TABLE_ARTICLE.CODE = TABLE_PRIX.CODE_P
    	AND(( DATE_L = &DATE_L) 
               AND DATE_C = &DATE_C)
    ORDER BY 
    	2
    Merci par avance

  2. #2
    Membre expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2013
    Messages
    1 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 1 563
    Points : 3 404
    Points
    3 404
    Par défaut
    Je souhaiterai étudier les écarts des prix PR et PUG entre la date de commande et la date de livraison.
    Je voudrais donc avoir 2 colonnes PR et 2 colonnes PUG avec l’une en date de livraison et l’une en date de commande.
    PR dépendant de DATE_C
    PR_1 dépendant de DATE_L

    et
    PUG dépendant de DATE_C
    PUG_1 dépendant de DATE_L
    SI je comprend bien, la clef primaire de la table TABLE_PRIX n'est pas que CODE_P? Et donc, un code article peut avoir plusieurs correspondances dans TABLE_PRIX?

  3. #3
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 188
    Points : 12 744
    Points
    12 744
    Par défaut
    Bonjour,
    Je ne vois pas trop l'intérêt d'une sous-requête ici.
    Il suffit d'utiliser deux fois la table TABLE_PRIX dans la requête, avec deux jointures distincts. L'une permet de récupérer le prix à la date de la commande, et l'autre à la date de la livraison.
    La même table étant utilisée deux fois, il faut utilise des alias dans la requête.

    Tatayo.

  4. #4
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Alimentation

    Informations forums :
    Inscription : Avril 2015
    Messages : 38
    Points : 13
    Points
    13
    Par défaut
    Bonjour,

    Les 2 tables (table article et table prix) sont liées par le code article : CODE et CODE_P.

    La table article me sert à avoir le libellé de l'article et la table prix tous les prix et dates.

    Donc un article X par exemple aura un PR pour une date_c et un PR_1 pour une date_l

    Je pense que la clé primaire ets unique il s'agit du code article.

    La seule différence est la date de commande et la date de livraison qui sera différente et pour laquelle il y'a des prix différents.

  5. #5
    Membre expérimenté
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 146
    Points : 1 412
    Points
    1 412
    Par défaut
    Bonjour à tous

    Si j'ai bien lu, la table contient les colonnes PR et PUG, non ??
    Code article : CODE_P
    Prix de revient : PR
    Prix de cession : PUG
    Date de commande : DATE_C
    Date de livraison : DATE_L
    Donc si j'ai bien compris l’objectif
    Je souhaiterai étudier les écarts des prix PR et PUG entre la date de commande et la date de livraison.
    .

    Il suffit de faire une soustraction entre PUG et PR ....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT PUG - PR as Ecart
       FROM TABLE_PRIX 
          INNER JOIN ........
    Pour la jointure ce serait mieux qu'elle suive les normes
    Merci d'ajouter un sur les tags qui vous ont aidé

  6. #6
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Alimentation

    Informations forums :
    Inscription : Avril 2015
    Messages : 38
    Points : 13
    Points
    13
    Par défaut
    Bonjour Olivier,

    Je me suis mal exprimée...

    Je sais bien qu'il faudra que je fasse une soustraction pour l'écart.
    Mais ce que je souhaite c'est avoir une colonne PR en date-c et une colonne pr en date_l pour étudier l'écart de prix PR entre date_c et date_L.
    Idem pour le prix PUG.

    Merci

  7. #7
    Membre expérimenté
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 146
    Points : 1 412
    Points
    1 412
    Par défaut
    Mais là encore, pour une même ligne la table présente :
    ..
    Date de commande : DATE_C
    Date de livraison : DATE_L
    Aussi, il me semble que toutes les infos sont disponibles sur une seule ligne pour un article...

    Le mieux serait sans doute de mettre un jeu de données d'essai avec ton attendu comme résultat.
    Merci d'ajouter un sur les tags qui vous ont aidé

  8. #8
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Février 2010
    Messages : 4 146
    Points : 7 388
    Points
    7 388
    Billets dans le blog
    1
    Par défaut Le boudin c'est bon à la santé, mais c'est dur à comprendre...
    Si j'ai bien compris toute cette eau de boudin, y'a qu'une seule colonne date, et tantôt elle correspond la date de la commande, tantôt elle correspond à la date de la livraison, c'est ça ?

    Donc pour les deux paramètrs @date_c et @date_l, voici la requête qui va bien :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    select a.code, a.libelle, p1.pr pr_c, p1.pug pug_c, p2.pr pr_l, p2.pug pug_l
    from table_article a
    inner join table_prix p1 on p1.code_p = a.code and p1.date = @date_c
    inner join table_prix p2 on p2.code_p = a.code and p2.date = @date_l
    On ne jouit bien que de ce qu’on partage.

  9. #9
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Alimentation

    Informations forums :
    Inscription : Avril 2015
    Messages : 38
    Points : 13
    Points
    13
    Par défaut
    Bonjour StringBuilder,

    Merci beaucoup pour votre aide!!

    Mais étant très novice... vous avez légèrement modifié les noms de colonnes et tables et sans aucune parenthèse je m'y perds...

    De plus, on ne déclare pas la date dans le select ? et je ne comprends pas le P1.pr ?

    Pour moi il y'a 2 colonnes dans le select date_c et date_l que l'on doit ensuite renseigner au lancement de la requête et qui donne des prix différents. Je n'arrive pas à reconsrtuire ma requête avec vos éléments et pourtant je pense que c'est bien la solution. Pouvez-vous svp détailler?

    Merci par avance

  10. #10
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Février 2010
    Messages : 4 146
    Points : 7 388
    Points
    7 388
    Billets dans le blog
    1
    Par défaut
    Ça y est, vous m'avez perdu aussi !

    Montrez-nous un select * de chacune de vos deux tables, et un tableau indiquant ce que vous voulez en sortie.

    Car là, j'arrive juste pas à comprendre ce que vous faites.

    En fait, plus ça va et plus j'ai peur que votre modèle des données soit totalement bancal...

    Dans "TABLE_PRIX", il y a UNE ou DEUX colonnes date ?
    S'il y en a DEUX, y en a-t-il systématiquement une à NULL ?

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    select a.code, a.libelle, p1.pr pr_c, p1.pug pug_c, p2.pr pr_l, p2.pug pug_l
    from table_article a
    inner join table_prix p1 on p1.code_p = a.code
    inner join table_prix p2 on p2.code_p = a.code
    where p1.date_c = 'MaDateDeCommande'
    and p2.date_l = 'MaDateDeLivraison'

    (j'ai peur que ce soit ça en fait)
    On ne jouit bien que de ce qu’on partage.

  11. #11
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Alimentation

    Informations forums :
    Inscription : Avril 2015
    Messages : 38
    Points : 13
    Points
    13
    Par défaut
    Il y'a bien 2 dates dans la table prix.
    L'une est la date de commande : exemple le 13/08
    L'autre la date de livraison (en général toujours J+1) : 14/08

    Il se trouve que l'un des 2 prix est saisi à la commande et doit être le même que le prix facturé à la livraison mais parfois il y'a des erreurs de frappe. Voilà pourquoi je cherche à étudier l'écart entre un prix d'un même article mais sur 2 dates.

  12. #12
    Membre expérimenté
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 146
    Points : 1 412
    Points
    1 412
    Par défaut
    Dans le "schéma" des tables du premier message, moi je vois 2 colonnes dates et 2 colonnes prix....

    En tout cas je suis tout aussi perdu.

    Il faut retourner au fondamentaux :
    * Lire les cours SQL
    * Fournir un vrai schéma des tables incriminés
    * Fournir un jeu de données de test
    * Indiquer le(s) requête(s) déjà testé,
    * Donner le résultat attendu par cette requête et le résultat obtenu

    Avec tout ça on devrait moins se prendre la tête
    Merci d'ajouter un sur les tags qui vous ont aidé

  13. #13
    Membre expérimenté
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 146
    Points : 1 412
    Points
    1 412
    Par défaut
    Il y'a bien 2 dates dans la table prix.
    L'une est la date de commande : exemple le 13/08
    L'autre la date de livraison (en général toujours J+1) : 14/08

    Il se trouve que l'un des 2 prix est saisi à la commande et doit être le même que le prix facturé à la livraison mais parfois il y'a des erreurs de frappe. Voilà pourquoi je cherche à étudier l'écart entre un prix d'un même article mais sur 2 dates.
    Tout ça pour ça !!!
    Donc tout est dans la ligne !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SELECT PUG - PR
       FROM table_prix
    et c'est fini....
    Merci d'ajouter un sur les tags qui vous ont aidé

  14. #14
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Alimentation

    Informations forums :
    Inscription : Avril 2015
    Messages : 38
    Points : 13
    Points
    13
    Par défaut
    PUG - PR ?

    A la fin je cherche à calculer :

    PUG_date.livraison - PUG_date.commande

  15. #15
    Membre expérimenté
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 146
    Points : 1 412
    Points
    1 412
    Par défaut
    je craque

    PUG et PR sont les intitulés de VOS colonnes de la table TABLE_PRIX !!!!!!!!


    faites un jeu d'exemple....
    Merci d'ajouter un sur les tags qui vous ont aidé

  16. #16
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Alimentation

    Informations forums :
    Inscription : Avril 2015
    Messages : 38
    Points : 13
    Points
    13
    Par défaut
    Voici le résultat de ma requête actuelle.

    Je veux les mêmes colonnes mais une vraie correspondance entre les PR et PUG et les dates de liv et date de commande.
    Fichiers attachés Fichiers attachés

  17. #17
    Membre expérimenté
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 146
    Points : 1 412
    Points
    1 412
    Par défaut
    Encore une fois et comme le disait aussi string builder pour partie, pour pouvoir faire les choses correctement
    Il faut retourner au fondamentaux :
    * Lire les cours SQL
    * Fournir un vrai schéma des tables incriminés
    * Fournir un jeu de données de test
    * Indiquer le(s) requête(s) déjà testé,
    * Donner le résultat attendu par cette requête et le résultat obtenu
    et pas un fichier excel incompréhensible pour nous
    Merci d'ajouter un sur les tags qui vous ont aidé

  18. #18
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Février 2010
    Messages : 4 146
    Points : 7 388
    Points
    7 388
    Billets dans le blog
    1
    Par défaut
    Bon, et à défaut de nous donner la structure de vos tables et un jeu de résultat...

    Que donne la seconde requête que je vous ai envoyé ?

    Car pour moi elle fait exactement ce que vous voulez...

    Au détail près qu'elle retourne les deux PUG et les deux PR au lieu de faire le calcul que vous désirez, mais faut pas pousser non plus, je pense que vous savez faire une soustraction ?
    On ne jouit bien que de ce qu’on partage.

  19. #19
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Alimentation

    Informations forums :
    Inscription : Avril 2015
    Messages : 38
    Points : 13
    Points
    13
    Par défaut
    Très bien!!!
    C'était effectivement la bonne structure. Merci beaucoup!
    Par contre j'ai voulu ajouter 2 colonnes qui calculent l'écart mais apparemment ça ne fait pas la soustraction à la ligne article.
    TABLE_PRIX.PUG_1 - ERBUREP.PUG * 100 AS "Ecart PUG";
    TABLE_PRIX.PR_1 - ERBUREP.PR * 100 AS "Ecart PR"

    Est-il possible de calculer cet écart sur chaque ligne article ?

    merci

  20. #20
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 188
    Points : 12 744
    Points
    12 744
    Par défaut
    Il me semble qu'en mathématique, la multiplication a priorité sur l'addition...

    Tatayo.

Discussions similaires

  1. Réponses: 4
    Dernier message: 12/07/2019, 10h42
  2. Créer une sous requête dans Web-i RC
    Par ruru9 dans le forum Webi
    Réponses: 2
    Dernier message: 19/07/2013, 16h56
  3. Comment créer une sous requête sur plusieurs champs?
    Par Anonymouse dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 10/06/2008, 10h13
  4. Ramener plusieurs champs dans une sous requête...
    Par David.V dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 12/01/2005, 08h54
  5. Réponses: 3
    Dernier message: 18/05/2003, 01h16

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