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 :

simplification de requete sql


Sujet :

Langage SQL

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Mai 2008
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 2
    Points : 1
    Points
    1
    Par défaut simplification de requete sql
    bonjour a tous voila je doit faire une application en java sur un as400
    qui me sortira le top purchase order.(top commande).

    j'ai donc fait ma requette sql mais elle est trop gourmande si quelle qu'un a une idée pour la simplifier.

    c'est une veille base de donner et il arrive que des table differente est les même nom de champs.

    d'avance merci de votre aide

    voici la requete.


    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
    select  tb2.g2noms, cg2.g2grou, b12.noart,  ap1.artlib, ap1.artnpk, 
    ap1.artnca, sum(b12.qtyord) as total_pack, u1.arunum, b12.majvtf,
     
    (select sum(b12b.qtyord)from roxusbas.bilf012 b12b, roxusbas.bilf009 b09b, roxusbas.artusp01 up1 
    left outer join roxusbas.clig2p01 cg2b on b09b.codcli  = cg2b.g2clie 
     
    where b12b.numbol = b09b.numbol and b09b.datsta = b12b.datsta and  b09b.datshi>= 20080401 
    and up1.aruold = b12b.noart and b09b.datsta <= 20080416  and b09b.status<>9 
    and  b09b.codsit = 06 and b12b.codsit = 06 and b12b.majvtf = 2
    and up1.arunum = u1.arunum and cg2b.g2grou = cg2.g2grou
    group by b12b.noart, cg2b.g2grou) as old_total_case,
     
    (select sum(b12b.qtyord)from roxusbas.bilf012 b12b, roxusbas.bilf009 b09b, roxusbas.artusp01 up1
    left outer join roxusbas.clig2p01 cg2b on b09b.codcli  = cg2b.g2clie 
    where b12b.numbol = b09b.numbol and b09b.datsta = b12b.datsta and  b09b.datshi>= 20080401 
    and b09b.datsta <= 20080416  and b09b.status<>9 and up1.aruold = b12b.noart 
    and  b09b.codsit = 06 and b12b.codsit = 06 and b12b.majvtf = 1 and
    and up1.arunum = u1.arunum and cg2b.g2grou = cg2.g2grou
    group by b12b.noart, cg2b.g2grou) as old_total_palette,
     
    (select sum(b12.qtyord) from roxusbas.bilf012 b12, roxusbas.bilf009 b09 
    left outer join roxusbas.clig2p01 cg2b on b09.codcli  = cg2b.g2clie 
    where b12.numbol = b09.numbol and b09.datsta = b12.datsta and  b09.datshi>= 20090401 
    and b09.datshi<=20090416  and b09.status<>9 
    and  b09.codsit = 06 and b12.codsit = 06  
     
    and cg2b.g2grou = cg2.g2grou group by cg2b.g2grou ) as total_national_group 
     
    from roxusbas.bilf009 b09, roxusbas.bilf012 b12  
    left outer join roxusbas.clig2p01 cg2 on b09.codcli  = cg2.g2clie 
    left outer join roxusbas.tabg2p01 tb2 on cg2.g2grou = tb2.g2ngro 
    left outer join roxusbas.artusp01 u1 on u1.aruold = b12.noart 
    left outer join roxusbas.artpfp01 ap1 on ap1.artnum = u1.arunum  
     
    where b12.numbol = b09.numbol and b09.datsta = b12.datsta and  b09.datshi>= 20090401 
    and b09.datshi<=20090416  and b09.status<>9 
     
    and  b09.codsit = 06 and b12.codsit = 06
     
    group by tb2.g2noms, cg2.g2grou, b12.noart,  ap1.artlib, 
    ap1.artnpk, ap1.artnca , u1.arunum, b12.majvtf, 
     
     
    (select sum(b12b.qtyord)from roxusbas.bilf012 b12b, roxusbas.bilf009 b09b, roxusbas.artusp01 up1
    left outer join roxusbas.clig2p01 cg2b on b09b.codcli  = cg2b.g2clie 
    where b12b.numbol = b09b.numbol and b09b.datsta = b12b.datsta and  b09b.datshi>= 20080401 
    and b09b.datsta <= 20080416  and b09b.status<>9 and up1.aruold = b12b.noart 
    and  b09b.codsit = 06 and b12b.codsit = 06 and b12b.majvtf = 2 and
    and up1.arunum = u1.arunum and cg2b.g2grou = cg2.g2grou
    group by b12b.noart, cg2b.g2grou),
     
    (select sum(b12b.qtyord)from roxusbas.bilf012 b12b, roxusbas.bilf009 b09b, roxusbas.artusp01 up1
    left outer join roxusbas.clig2p01 cg2b on b09b.codcli  = cg2b.g2clie 
    where b12b.numbol = b09b.numbol and b09b.datsta = b12b.datsta and  b09b.datshi>= 20080401 
    and b09b.datsta <= 20080416  and b09b.status<>9 and up1.aruold = b12b.noart 
    and  b09b.codsit = 06 and b12b.codsit = 06 and b12b.majvtf = 1 and
    and up1.arunum = u1.arunum and cg2b.g2grou = cg2.g2grou
    group by b12b.noart, cg2b.g2grou),
     
    (select sum(b12.qtyord) from roxusbas.bilf012 b12, roxusbas.bilf009 b09 
    left outer join roxusbas.clig2p01 cg2b on b09.codcli  = cg2b.g2clie 
     
    where b12.numbol = b09.numbol and b09.datsta = b12.datsta and  b09.datshi>= 20090401 
    and b09.datshi<=20090416  and b09.status<>9  
     
    and  b09.codsit = 06 and b12.codsit = 06 
     
    and cg2b.g2grou = cg2.g2grou 
    group by cg2b.g2grou ) 
     
    order by total_national_group desc;

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 394
    Points
    18 394
    Par défaut
    Avez-vous pris le temps de lire le post à lire absolument avant de poster votre premier post ?

    http://www.developpez.net/forums/a69...gage-sql-lire/

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Mai 2008
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Desole
    je doit avoue que je ne l'avais pas lu.

    Excuser moi. Pour ca.

  4. #4
    Expert éminent sénior
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 801
    Points : 34 063
    Points
    34 063
    Billets dans le blog
    14
    Par défaut
    C'est une horreur cette requête !

    Gros mélange entre la syntaxe normalisée (depuis 1992) pour les jointures (JOIN) et l'ancienne (FROM ... WHERE). Ce qui fait qu'on a du mal à s'y retrouver. Il y a même des conditions rigolotes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AND up1.arunum = u1.arunum AND cg2b.g2grou = cg2.g2grou
    Ça ce sera toujours vrai donc inutile !

    J'ai réécrit la première partie en jointures normalisées :
    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  tb2.g2noms, cg2.g2grou, b12.noart,  ap1.artlib, ap1.artnpk, ap1.artnca, 
    	sum(b12.qtyord) AS total_pack, 
    	u1.arunum, b12.majvtf,
     
    	(SELECT sum(b12b.qtyord)
    	FROM roxusbas.bilf012 b12b, 
    	INNER JOIN roxusbas.bilf009 b09b ON b12b.numbol = b09b.numbol AND b09b.datsta = b12b.datsta
    	INNER JOIN roxusbas.artusp01 up1 ON up1.aruold = b12b.noart
    	LEFT OUTER JOIN roxusbas.clig2p01 cg2b ON b09b.codcli = cg2b.g2clie 
     
    	WHERE  b09b.datshi >= 20080401 
    		AND b09b.datsta <= 20080416  
    		AND b09b.status <> 9 
    		AND b09b.codsit = 06 
    		AND b12b.codsit = 06 
    		AND b12b.majvtf = 2
    	GROUP BY b12b.noart, cg2b.g2grou
    	) AS old_total_case,
    Un GROUP BY alors qu'il n'y a qu'un SUM dans le SELECT de la sous-requête, c'est étrange !

    Pas le temps de faire le reste. À toi de continuer mais il y a probablement plus simple.
    Comme le disent les règles du forum que Waldar t'a invité à lire, la description des tables, un jeu de données d'essai et la description précise du besoin serait utile pour qu'on puisse t'aider efficacement.

  5. #5
    Expert éminent
    Avatar de Lyche
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2007
    Messages
    2 523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 523
    Points : 6 790
    Points
    6 790
    Billets dans le blog
    4
    Par défaut
    Et une petite indentation correcte des prochains codes données, c'est pas que c'est pénible de lire une requète SQL sur 2 lignes, mais ça rend la tâche un peu moins agréable.

    si tu n'arrives pas à indenter, je te conseil de regarder ce site
    Instant SQL Formater
    ça réorganise les requète SQL et les indentes de façon très lisible

    Cordialement.

  6. #6
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 394
    Points
    18 394
    Par défaut
    Ça ce sera toujours vrai donc inutile !
    En fait non, ce ne sont pas les mêmes alias de tables

  7. #7
    Expert éminent sénior
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 801
    Points : 34 063
    Points
    34 063
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par Waldar Voir le message
    Citation Envoyé par CinePhil
    Ça ce sera toujours vrai donc inutile !
    En fait non, ce ne sont pas les mêmes alias de tables
    Oups ! Au temps pour moi !

    Sauf que dans le FROM il n'y a que les alias up1 et cg2b. On les trouve où u1 et cg2 ? Le SGBD devine tout seul qu'il s'agit d'alias différents de la même table ?

    Comme quoi avec la syntaxe normalisée, je l'aurais vu tout de suite.

    Enfin bref, requête complètement à revoir.

Discussions similaires

  1. Problème Requete SQL et QuickReport
    Par arnaud_verlaine dans le forum C++Builder
    Réponses: 7
    Dernier message: 07/01/2004, 10h31
  2. Prob de requete sql et variable
    Par agent-zaizai dans le forum ASP
    Réponses: 11
    Dernier message: 21/10/2003, 17h54
  3. requete sql
    Par autumn319 dans le forum ASP
    Réponses: 22
    Dernier message: 10/09/2003, 17h46
  4. Paramètre requete SQL (ADOQuery)
    Par GaL dans le forum C++Builder
    Réponses: 3
    Dernier message: 30/07/2002, 12h24
  5. Resultat requete SQL
    Par PierDIDI dans le forum Bases de données
    Réponses: 2
    Dernier message: 23/07/2002, 14h43

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