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 :

SQL : fusionner 2 requêtes


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 SQL : fusionner 2 requêtes
    Bonjour,
    Très novice en SQL je fais appel à vos lumières.
    J’ai 2 requêtes SQL : l’une me permet d’avoir mes commandes du jour et l’autre les commandes prévisionnelles à J+1. Au lancement de la première je dois entrer la date du jour alors qu’au lancement de la seconde je dois entrer la date de J+1.
    Je souhaiterai intégrer dans la première requête 2 nouvelles colonnes : la date de J+1 et les commandes J+1 qui correspondent à cette date là.
    Ce qui doit lier ces 2 est le code article identique pour les 2 requêtes : EDBUCD dans la 1ère = BJBUCD dans la seconde requête.
    Seules les 2 dernières colonnes de la 2ème requête m’intéressent (les autres sont identiques) et je souhaite les ajouter à la première. Ce sont SUM( BXAIQT ) commandes de J+1 et BXADDT date prévisionnelle.
    Voici la 1ère requête :

    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    SELECT DISTINCT  
    	'723' AS CODE_ENTREPOT;
    	EVJ5REP.J5B1NU;
    	EUBKREL0.BKA9CD;
    	EUBKREL0.BKBACD;
    	EUBKREL0.BKBECD;
    	EUBJREL0.BJFYTX;
    	EUBJREL0.BJBGCD;
    	TABLE_STOCK.EDBUCD;
    	EUBKREL0.BKFOTX;
    	TABLE_STOCK.EDBFCD;
    	TABLE_RECEPTION_FERME.SumReceptionFerme AS "Arr. intégrées";
    	'' AS "Commentaires" 
    FROM 
    	EURPRD1.FIC723.EUEDREP TABLE_STOCK
    	LEFT OUTER JOIN (
    SELECT DISTINCT  
    	ERBRREP.BRBUCD AS IFLS_RECEPTION_FERME;
    	ERBRREP.BRAVDT;
    	SUM( ERBRREP.BRBEQT ) AS SumReceptionFerme 
    FROM 
    	EURPRD1.FIC723.ERBRREP ERBRREP 
    WHERE 
    	ERBRREP.BRAVDT = &EDBZDT 
     
    GROUP BY 
    	ERBRREP.BRBUCD;
    	ERBRREP.BRAVDT 
    ) TABLE_RECEPTION_FERME
    	ON 
    		TABLE_STOCK.EDBUCD = TABLE_RECEPTION_FERME.IFLS_RECEPTION_FERME AND
    		TABLE_STOCK.EDBZDT = TABLE_RECEPTION_FERME.BRAVDT
    	INNER JOIN EURPRD1.FIC723.EUBJREP EUBJREL0
    	ON 
    		TABLE_STOCK.EDBUCD = EUBJREL0.BJBUCD
    	INNER JOIN EURPRD1.FIC723.EUBKREP EUBKREL0
    	ON 
    		TABLE_STOCK.EDBUCD = EUBKREL0.BKBUCD
    	INNER JOIN EURPRD1.FIC723.EVJ5REP EVJ5REP
    	ON 
    		TABLE_STOCK.EDBUCD = EVJ5REP.J5BUCD
     
    WHERE 
    	TABLE_STOCK.EDBZDT = &EDBZDT
    	AND EUBKREL0.BKA9CD IN( &BKA9CD )
    Et voici la seconde avec les commandes J+1 :
    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
    SELECT 
    	'723' AS "Code entrepot";
    	BJBGCD;
    	BJFYTX;
    	BJBUCD;
    	BKFOTX;
    	SUM( BXAIQT ) AS "SumEubxrep.bxaiqt";
    	BXADDT 
    FROM 
    	EURPRD1.FIC723.EUBXREP EUBXREP;  
    	EURPRD1.FIC723.EUBJREP EUBJREP;  
    	EURPRD1.FIC723.EUBKREP EUBKREP 
    WHERE 
    	EUBXREP.BXBUCD = EUBJREP.BJBUCD
    	AND EUBJREP.BJBUCD = EUBKREP.BKBUCD
    	AND ( BXADDT = &BXADDT) 
     
    GROUP BY 
    	BJBGCD;
    	BJFYTX;
    	BJBUCD;
    	BKFOTX;
    	BXADDT
    Merci infiniment par avance.

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    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 136
    Points : 38 909
    Points
    38 909
    Billets dans le blog
    9
    Par défaut
    bonjour

    Je ne sais pas quelle base de données vous utilisez, mais dans la (quasi ?) totalité des SGBD, le point-virgule est la fin d'instruction.
    Il faut utiliser la virgule pour séparer les colonnes : select colonne1, colonne2 etc...

    Si la requete est lancée depuis un automate d'exploitation, alors c'est à l'automate de communiquer la valeur des dates J et J+1 au format souhaité

    Sinon, selon la basede donnée, le calcul de J+1 peut être
    - select CURRENT DATE + 1 DAYS from SYSIBM.SYSDUMMY1 ; -- DB2
    - select CURRENT DATE + 1 DAYS from DUAL ; -- Oracle
    - select DATEADD(dd, 1, GETDATE()) ; -- SQL Server

    Il suffit ensuite de filtrer (where) en utilisant un between ou un or avec ces 2 dates J et J+1

    Une remarque : il est préférable de faire les jointures comme dans votre première requete, plutôt que comme votre 2ème.
    en effet, séparer les critères de filtrage (du where) de ceux de jointure (on) rend la requete plus lisible

  3. #3
    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,
    Merci pour votre réponse. Je pense m’être mal exprimée… Ces 2requêtes n’ont pas été développées par moi j’ai un niveau très basique en sql.
    Ce que je souhaiterai c’est intégré les 2 dernières colonnes de la 2ème requête dans la 1ère.
    Or la 1ère lors du lancement nous demande la date puis en fonction elle sort les commandes du jour (colonne TABLE_RECEPTION_FERME.SumReceptionFerme AS "Arr. intégrées".
    La 2ème contient aussi une date (colonne BXADDT) et les commandes en fonction de cette date (qui sera J+1) : SUM( BXAIQT ) AS "SumEubxrep.bxaiqt";
    Je souhaiterai qu’au lancement de la requête il faille entrer 2 dates : la 1ère comme d’habitude et la seconde (J+1) et que la requête me sorte les 2 commandes. Ce sont deux colonnes de tables différentes je pense donc que c faisable mais je ne sais pas faire.
    Ma question est donc : comment intégrer ces quelques lignes de codes dans la 1ère requête.
    Merci

  4. #4
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    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 136
    Points : 38 909
    Points
    38 909
    Billets dans le blog
    9
    Par défaut
    Difficile de répondre, car dans la 2ème requête il y a 3 tables, et rien n'indique d'où proviennent les colonnes BXAIQT et BXADDT à ajouter dans la 1ère requête

    De plus, les tables de la 2ème requête étant différentes de celles de la 1ère, il faut préciser sur quelles colonnes doivent être faites les jointures

    Et, encore une fois, je doute fort que ces requêtes fonctionnent en l'état, car le ";" est en SQL standard la fin d'instruction

    Quelle est la base de données ?

  5. #5
    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,

    merci pour votre réponse.

    En effet aucun nom n'est explicite je vois la difficulté.
    J'ai essayé de ramener les colonnes dans la 1ère requête et faire la jointure mais la requête ne prend pas toutes les commandes... en effet il y'a moins de valeurs que lorsque je fais tourner chaque requêt séparément.

    voici le code si vous pouvez voir quelque chose :

    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    SELECT DISTINCT  
    	'723' AS CODE_ENTREPOT;
    	J5B1NU;
    	BKA9CD;
    	BKBACD;
    	BKBECD;
    	BJFYTX;
    	BJBGCD;
    	EDBUCD;
    	BKFOTX;
    	EDBFCD;
    	TABLE_RECEPTION_FERME.SumReceptionFerme AS "Arr. intégrées";
    	BXBUCD;
    	SUM( BXAIQT ) AS "SumEubxrep.bxaiqt";
    	BXADDT;
    	'' AS "Commentaires" 
    FROM 
    	EURPRD1.FIC723.EUEDREP TABLE_STOCK
    	LEFT OUTER JOIN (
    SELECT DISTINCT  
    	BRBUCD AS IFLS_RECEPTION_FERME;
    	BRAVDT;
    	SUM( BRBEQT ) AS SumReceptionFerme 
    FROM 
    	EURPRD1.FIC723.ERBRREP ERBRREP 
    WHERE 
    	ERBRREP.BRAVDT = &EDBZDT 
     
    GROUP BY 
    	BRBUCD;
    	BRAVDT 
    ) TABLE_RECEPTION_FERME
    	ON 
    		TABLE_STOCK.EDBUCD = TABLE_RECEPTION_FERME.IFLS_RECEPTION_FERME AND
    		TABLE_STOCK.EDBZDT = TABLE_RECEPTION_FERME.BRAVDT
    	INNER JOIN EURPRD1.FIC723.EUBJREP EUBJREL0
    	ON 
    		TABLE_STOCK.EDBUCD = EUBJREL0.BJBUCD
    	INNER JOIN EURPRD1.FIC723.EUBKREP EUBKREL0
    	ON 
    		TABLE_STOCK.EDBUCD = EUBKREL0.BKBUCD
    	INNER JOIN EURPRD1.FIC723.EVJ5REP EVJ5REP
    	ON 
    		TABLE_STOCK.EDBUCD = EVJ5REP.J5BUCD
    	INNER JOIN EURPRD1.FIC723.EUBXREP EUBXREP
    	ON 
    		TABLE_STOCK.EDBUCD = EUBXREP.BXBUCD
     
    WHERE 
    	EDBZDT = &EDBZDT
    	AND ( BXADDT = &BXADDT) 
     
    GROUP BY 
    	J5B1NU;
    	BKA9CD;
    	BKBACD;
    	BKBECD;
    	BJFYTX;
    	BJBGCD;
    	EDBUCD;
    	BKFOTX;
    	EDBFCD;
    	TABLE_RECEPTION_FERME.SumReceptionFerme;
    	BXBUCD;
    	BXADDT 
    ORDER BY 
    	2; 
    	3; 
    	4; 
    	5; 
    	6; 
    	8
    merci

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

Discussions similaires

  1. Problème pour fusionner 2 requêtes SQL
    Par Littlexmary dans le forum Langage SQL
    Réponses: 1
    Dernier message: 27/05/2013, 21h55
  2. Fusionner trois requêtes SQL
    Par la_chouette dans le forum Langage SQL
    Réponses: 6
    Dernier message: 30/06/2011, 10h53
  3. Affecter résultat SQL d'une requête à une variable
    Par bozolozo dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 02/01/2005, 17h37
  4. Fusionner 3 requêtes avec un SUM en une seule
    Par David Guillouet dans le forum Langage SQL
    Réponses: 3
    Dernier message: 28/07/2004, 15h54
  5. [PL/SQL] Parseur de requête
    Par SheikYerbouti dans le forum SQL
    Réponses: 19
    Dernier message: 20/04/2004, 16h04

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