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 :

Requête SQL à convertir


Sujet :

Langage SQL

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mai 2018
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2018
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Requête SQL à convertir
    Bonjour,

    Je débute dans le langage SQL, mais malheureusement mon travail ne me permet pas d'attendre longtemps pour mieux maîtriser ce langage (les délais sont très courts).
    Bref, ce que je voudrais est peut être simple pour vous, j'ai la requête suivante :

    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
    73
    74
    75
    SELECT
      RECEP_CDE.DATE_LIQ,
      COMMANDE.DATE_IMPUTATION,
      COMMANDE.EXERCICE,
      COMMANDE.NU_CDE,
      LIG_COMMANDE.LIG_CDE,
      LIG_COMMANDE.LIBELLE_LIGNE_CDE,
      DESIGN_CDE.DESIGN_LIG2,
      DESIGN_CDE.DESIGN_LIG3,
      RECEP_CDE.NUM_LIQ,
      TO_NUMBER(TO_CHAR(RECEP_CDE.DATE_LIQ,'SYYYY')),
      FOURNISSEURS.FOURNISSEUR,
      COMMANDE.DATE_PASSATION,
      COMMANDE.OBJET_DEPENSE,
      BN_CDE.BLOC_NOTE_1,
      BN_CDE.BLOC_NOTE_2,
      COMMANDE.TXFO1,
      COMMANDE.TXFO2,
      LIG_COMMANDE.NU_CDE,
      DESIGN_CDE.DESIGN_LIG4,
      CONCAT(COMPTES_DEPENSES.COMPTE_RECEVEUR, CONCAT( ' - ' ,COMPTES_RECEVEURS.LIBELLE_RECEVEUR)),
      LIQUIDATIONS.COMPTE_ORDONNATEUR,
      CONCAT(COMPTES_DEPENSES.COMPTE_ORDONNATEUR, CONCAT( ' - ' ,COMPTES_DEPENSES.LIBELLE_COMPTE)),
      COMPTES_DEPENSES.NU_COMPTE,
      sum(LIG_COMMANDE.MT_ENGAGE),
      sum(LIG_COMMANDE.QTE_CDEE),
      sum(LIG_COMMANDE.QTE_RECUE),
      sum(LIG_COMMANDE.MT_RECU),
      sum(decode(LIG_COMMANDE.LG_SOLDEE,'O', 0, LIG_COMMANDE.MT_ENGAGE - LIG_COMMANDE.MT_RECU))
    FROM
      COMPTES_RECEVEURS,
      COMPTES_DEPENSES,
      FOURNISSEURS,
      LIQUIDATIONS,
      LIG_COMMANDE,
      RECEP_CDE,
      COMMANDE,
      DESIGN_CDE,
      BN_CDE
    WHERE
      ( COMMANDE.EH=LIG_COMMANDE.EH and COMMANDE.GEST=LIG_COMMANDE.GEST and COMMANDE.NU_CDE=LIG_COMMANDE.NU_CDE  )
      AND  ( LIG_COMMANDE.EH=DESIGN_CDE.EH (+) and LIG_COMMANDE.GEST=DESIGN_CDE.GEST (+) and LIG_COMMANDE.LIG_CDE=DESIGN_CDE.LIG_CDE (+) and LIG_COMMANDE.NU_CDE=DESIGN_CDE.NU_CDE (+)  )
      AND  ( RECEP_CDE.EH (+) =LIG_COMMANDE.EH and RECEP_CDE.GEST (+)=LIG_COMMANDE.GEST and RECEP_CDE.LIG_CDE (+) =LIG_COMMANDE.LIG_CDE and RECEP_CDE.NU_CDE (+) =LIG_COMMANDE.NU_CDE  AND RECEP_CDE.LIG_CDE (+)   = LIG_COMMANDE.LIG_CDE  )
      AND  ( BN_CDE.EH (+) =COMMANDE.EH and BN_CDE.GEST (+) =COMMANDE.GEST and BN_CDE.NU_CDE (+) =COMMANDE.NU_CDE  )
      AND  ( COMPTES_RECEVEURS.COMPTE_RECEVEUR=COMPTES_DEPENSES.COMPTE_RECEVEUR and COMPTES_RECEVEURS.EH=COMPTES_DEPENSES.EH and COMPTES_RECEVEURS.EXERCICE=COMPTES_DEPENSES.EXERCICE  )
      AND  ( COMPTES_DEPENSES.COMPTE_ORDONNATEUR=LIG_COMMANDE.COMPTE_ORDONNATEUR and COMPTES_DEPENSES.EH=LIG_COMMANDE.EH and COMPTES_DEPENSES.EG=LIG_COMMANDE.EG_COMPTE  and
    COMPTES_DEPENSES.EXERCICE  =to_number( to_char(LIG_COMMANDE.DATE_PASSATION,'YYYY'))  )
      AND  ( LIG_COMMANDE.EH=FOURNISSEURS.EH and LIG_COMMANDE.FOURNISSEUR=FOURNISSEURS.FOURNISSEUR  )
      AND  ( RECEP_CDE.EH=LIQUIDATIONS.EH (+) and RECEP_CDE.GEST=LIQUIDATIONS.GEST (+) and RECEP_CDE.NUM_LIQ=LIQUIDATIONS.NUM_LIQ (+) and RECEP_CDE.LIG_CDE=LIQUIDATIONS.NUM_LIG_CDE (+) and RECEP_CDE.NU_CDE=LIQUIDATIONS.NUM_CDE (+) and RECEP_CDE.NU_RECEP=LIQUIDATIONS.NUM_RECEP (+)   )
      AND  
      COMPTES_DEPENSES.NU_COMPTE  IN  ( '2031','2050','2051','20510','20511','218321','218325','6132510','615161','615254','6152610','6261','62841','62843','64883'  )
    GROUP BY
      RECEP_CDE.DATE_LIQ, 
      COMMANDE.DATE_IMPUTATION, 
      COMMANDE.EXERCICE, 
      COMMANDE.NU_CDE, 
      LIG_COMMANDE.LIG_CDE, 
      LIG_COMMANDE.LIBELLE_LIGNE_CDE, 
      DESIGN_CDE.DESIGN_LIG2, 
      DESIGN_CDE.DESIGN_LIG3, 
      RECEP_CDE.NUM_LIQ, 
      TO_NUMBER(TO_CHAR(RECEP_CDE.DATE_LIQ,'SYYYY')), 
      FOURNISSEURS.FOURNISSEUR, 
      COMMANDE.DATE_PASSATION, 
      COMMANDE.OBJET_DEPENSE, 
      BN_CDE.BLOC_NOTE_1, 
      BN_CDE.BLOC_NOTE_2, 
      COMMANDE.TXFO1, 
      COMMANDE.TXFO2, 
      LIG_COMMANDE.NU_CDE, 
      DESIGN_CDE.DESIGN_LIG4, 
      CONCAT(COMPTES_DEPENSES.COMPTE_RECEVEUR, CONCAT( ' - ' ,COMPTES_RECEVEURS.LIBELLE_RECEVEUR)), 
      LIQUIDATIONS.COMPTE_ORDONNATEUR, 
      CONCAT(COMPTES_DEPENSES.COMPTE_ORDONNATEUR, CONCAT( ' - ' ,COMPTES_DEPENSES.LIBELLE_COMPTE)), 
      COMPTES_DEPENSES.NU_COMPTE

    Et je souhaiterai savoir ce qu'elle donne comme résultat, voilà!

    Merci d'avance

  2. #2
    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 788
    Points
    30 788
    Par défaut
    Pour pouvoir te donner le résultat de la requête, il faudrait connaître le contenu des tables parce que, sans données, cette requête ne retourne rien.
    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.

  3. #3
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    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 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    C'est une horreur cette requête !

    1) Les jointures s'écrivent depuis 1992 avec l'opérateur JOIN ; il serait temps de s'y mettre !

    2) Un code indenté et aéré est plus agréable à lire et à déboguer.

    3) Les parenthèses dans les conditions de jointure ou de restriction sont le plus souvent inutiles, sauf en cas de mélange de AND et de OR.

    4) L'utilisation d'alias pour les tables est fortement recommandé dès qu'il y a plus d'une table dans la requête. Cela facilite l'écriture et la lecture de celle-ci. Il faut ensuite utiliser systématiquement ces alias devant chaque colonne nommée pour savoir facilement de quelle table elle vient.

    Voici votre requête récrite de manière plus propre :
    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
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    SELECT
      rc.DATE_LIQ,
      c.DATE_IMPUTATION,
      c.EXERCICE,
      c.NU_CDE,
      lc.LIG_CDE,
      lc.LIBELLE_LIGNE_CDE,
      dc.DESIGN_LIG2,
      dc.DESIGN_LIG3,
      rc.NUM_LIQ,
      TO_NUMBER(TO_CHAR(rc.DATE_LIQ,'SYYYY')),
      f.FOURNISSEUR,
      c.DATE_PASSATION,
      c.OBJET_DEPENSE,
      bc.BLOC_NOTE_1,
      bc.BLOC_NOTE_2,
      c.TXFO1,
      c.TXFO2,
      lc.NU_CDE,
      dc.DESIGN_LIG4,
      CONCAT(cd.COMPTE_RECEVEUR, CONCAT(' - ', cr.LIBELLE_RECEVEUR)),
      l.COMPTE_ORDONNATEUR,
      CONCAT(cd.COMPTE_ORDONNATEUR, CONCAT(' - ', cd.LIBELLE_COMPTE)),
      cd.NU_COMPTE,
      SUM(lc.MT_ENGAGE),
      SUM(lc.QTE_CDEE),
      SUM(lc.QTE_RECUE),
      SUM(lc.MT_RECU),
      SUM(DECODE(lc.LG_SOLDEE, 'O', 0, lc.MT_ENGAGE - lc.MT_RECU))
     
    FROM COMMANDE c 
     
    INNER JOIN LIG_COMMANDE lc 
    	ON c.EH = lc.EH 
    	AND c.GEST = lc.GEST 
    	AND c.NU_CDE = lc.NU_CDE
     
    	INNER JOIN FOURNISSEURS f 
    		ON lc.EH = f.EH
    		AND lc.FOURNISSEUR = f.FOURNISSEUR
     
    	INNER JOIN COMPTES_DEPENSES cd 
    		ON cd.COMPTE_ORDONNATEUR = lc.COMPTE_ORDONNATEUR
    		AND cd.EH = lc.EH
    		AND cd.EG = lc.EG_COMPTE
    		AND cd.EXERCICE = TO_NUMBER(TO_CHAR(lc.DATE_PASSATION,'YYYY'))
     
    		INNER JOIN COMPTES_RECEVEURS cr
    			ON cr.COMPTE_RECEVEUR = cd.COMPTE_RECEVEUR
    			AND cr.EH = cd.EH
    			AND cr.EXERCICE = cd.EXERCICE
     
    	LEFT JOIN DESIGN_CDE dc 
    		ON lc.EH = dc.EH
    		AND lc.GEST = dc.GEST
    		AND lc.LIG_CDE = dc.LIG_CDE
    		AND lc.NU_CDE = dc.NU_CDE
     
    	LEFT JOIN RECEP_CDE rc 
    		ON rc.EH = lc.EH
    		AND rc.GEST = lc.GEST
    		AND rc.LIG_CDE = lc.LIG_CDE
    		AND rc.NU_CDE = lc.NU_CDE
    		AND rc.LIG_CDE = lc.LIG_CDE
     
    		LEFT JOIN LIQUIDATIONS l 
    			ON rc.EH = l.EH
    			AND rc.GEST = l.GEST
    			AND rc.NUM_LIQ = l.NUM_LIQ
    			AND rc.LIG_CDE = l.NUM_LIG_CDE
    			AND rc.NU_CDE = l.NUM_CDE
    			AND rc.NU_RECEP = l.NUM_RECEP
     
    LEFT JOIN BN_CDE bc 
    	ON bc.EH = c.EH
    	AND bc.GEST = c.GEST
    	AND bc.NU_CDE = c.NU_CDE
     
    WHERE cd.NU_COMPTE IN ('2031', '2050', '2051', '20510', '20511', '218321', '218325', '6132510', '615161', '615254', '6152610', '6261', '62841', '62843', '64883')
     
    GROUP BY
      rc.DATE_LIQ, 
      c.DATE_IMPUTATION, 
      c.EXERCICE, 
      c.NU_CDE, 
      lc.LIG_CDE, 
      lc.LIBELLE_LIGNE_CDE, 
      dc.DESIGN_LIG2, 
      dc.DESIGN_LIG3, 
      rc.NUM_LIQ, 
      TO_NUMBER(TO_CHAR(rc.DATE_LIQ,'SYYYY')), 
      f.FOURNISSEUR, 
      c.DATE_PASSATION, 
      c.OBJET_DEPENSE, 
      bc.BLOC_NOTE_1, 
      bc.BLOC_NOTE_2, 
      c.TXFO1, 
      c.TXFO2, 
      lc.NU_CDE, 
      dc.DESIGN_LIG4, 
      CONCAT(cd.COMPTE_RECEVEUR, CONCAT(' - ', cr.LIBELLE_RECEVEUR)), 
      l.COMPTE_ORDONNATEUR, 
      CONCAT(cd.COMPTE_ORDONNATEUR, CONCAT(' - ', cd.LIBELLE_COMPTE)), 
      cd.NU_COMPTE
    À vu de nez, elle est censée donner des sommes sur les commandes liquidées avec pas mal d'infos sur ces commandes, pour les comptes de dépenses listés dans le WHERE.

    Avec la première requête, c'est beaucoup plus difficile à deviner.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

Discussions similaires

  1. Convertir une requête SQL Server en requête Access
    Par facteur dans le forum Langage SQL
    Réponses: 28
    Dernier message: 22/05/2014, 17h18
  2. Réponses: 0
    Dernier message: 19/05/2014, 16h00
  3. Convertir une requête SQL en requête HQL
    Par akharraz dans le forum Hibernate
    Réponses: 3
    Dernier message: 30/05/2011, 23h42
  4. Convertir contenu d'un champ en requête sql
    Par boubou_s dans le forum Développement
    Réponses: 2
    Dernier message: 20/04/2011, 11h53

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