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 :

Rajouter une condition dans une requête imbriquée.


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Inscrit en
    Mars 2009
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 31
    Points : 10
    Points
    10
    Par défaut Rajouter une condition dans une requête imbriquée.
    Bonjour,

    J'ai un petit problème au niveau d'une requête dont je ne souhaiterais faire apparaitre que certaines lignes (ou certaines communes pour mon exemple).

    Je m'explique, j'ai une table commune regroupant 15 communes mais je ne souhaiterais faire apparaître que certaines d'entre elles (8). Je ne sais pas où placer cette condition?

    Autre petit problème dans ma requête, les résultats ne sont pas rangés dans l'odre indiqué... commune puis plh alors que j'ai une autre requête construite sur le même modèle et le résultats et bon...

    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
     
    SELECT libelle_geo,log_tot_10,log_tot_09,log_tot_08,log_tot_07,log_tot_06,log_tot_05,log_tot_04,log_tot_03,log_tot_02,log_tot_01,log_tot_00 FROM(
    SELECT
    plh.libelle_plh as libelle_geo,
    sum(epls.logtot2010) as log_tot_10,
    sum(epls.logtot2009) as log_tot_09,
    sum(epls.logtot2008) as log_tot_08,
    sum(epls.logtot2007) as log_tot_07,
    sum(epls.logtot2006) as log_tot_06,
    sum(epls.logtot2005) as log_tot_05,
    sum(epls.logtot2004) as log_tot_04,
    sum(epls.logtot2003) as log_tot_03,
    sum(epls.logtot2002) as log_tot_02,
    sum(epls.logtot2001) as log_tot_01,
    sum(epls.logtot2000) as log_tot_00
     
    FROM
    meddtl.epls
    JOIN tables_de_references.commune ON meddtl.epls.codgeo = commune.codgeo
    JOIN tables_de_references.plh ON commune.plh_ccio = plh.code_plh
    GROUP BY plh.code_plh
     
    UNION
     
    SELECT
    commune.libelle_commune as libelle_geo,
    sum(epls.logtot2010) as log_tot_10,
    sum(epls.logtot2009) as log_tot_09,
    sum(epls.logtot2008) as log_tot_08,
    sum(epls.logtot2007) as log_tot_07,
    sum(epls.logtot2006) as log_tot_06,
    sum(epls.logtot2005) as log_tot_05,
    sum(epls.logtot2004) as log_tot_04,
    sum(epls.logtot2003) as log_tot_03,
    sum(epls.logtot2002) as log_tot_02,
    sum(epls.logtot2001) as log_tot_01,
    sum(epls.logtot2000) as log_tot_00
     
    FROM
    meddtl.epls
    JOIN tables_de_references.commune ON meddtl.epls.codgeo = commune.codgeo
    JOIN tables_de_references.plh ON commune.plh_ccio = plh.code_plh
    GROUP BY commune.codgeo) as complet
    ORDER BY libelle_geo,log_tot_10;
    Si quelqu'un peut m'aider...Je vous remercie !!!

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    bonjour,

    Pour votre 1ere demadne lisez ceci (clause WHERE et opérateur IN) : http://sqlpro.developpez.com/cours/sqlaz/select/#L3

    Pour la 2eme, on tri les résultat d'une requête sql grâce à la clause ORDER BY.
    Dans votre cas vous avez un "union" qui à pour effet d'associé les résultats des deux requêtes.
    Il faudra donc placer votre clause order by à la fin de la requete (comme vous l'avez fait en fait)

  3. #3
    Membre à l'essai
    Inscrit en
    Mars 2009
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 31
    Points : 10
    Points
    10
    Par défaut
    Mais où placer la clause WHERE IN?

    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
     
    SELECT libelle_geo,log_tot_10,log_tot_09,log_tot_08,log_tot_07,log_tot_06,log_tot_05,log_tot_04,log_tot_03,log_tot_02,log_tot_01,log_tot_00 FROM(
    SELECT
    plh.libelle_plh as libelle_geo,
    sum(epls.logtot2010) as log_tot_10,
    sum(epls.logtot2009) as log_tot_09,
    sum(epls.logtot2008) as log_tot_08,
    sum(epls.logtot2007) as log_tot_07,
    sum(epls.logtot2006) as log_tot_06,
    sum(epls.logtot2005) as log_tot_05,
    sum(epls.logtot2004) as log_tot_04,
    sum(epls.logtot2003) as log_tot_03,
    sum(epls.logtot2002) as log_tot_02,
    sum(epls.logtot2001) as log_tot_01,
    sum(epls.logtot2000) as log_tot_00
     
    FROM
    meddtl.epls
    JOIN tables_de_references.commune ON meddtl.epls.codgeo = commune.codgeo
    JOIN tables_de_references.plh ON commune.plh_ccio = plh.code_plh
    GROUP BY plh.code_plh
     
    UNION
     
    SELECT
    commune.libelle_commune as libelle_geo,
    sum(epls.logtot2010) as log_tot_10,
    sum(epls.logtot2009) as log_tot_09,
    sum(epls.logtot2008) as log_tot_08,
    sum(epls.logtot2007) as log_tot_07,
    sum(epls.logtot2006) as log_tot_06,
    sum(epls.logtot2005) as log_tot_05,
    sum(epls.logtot2004) as log_tot_04,
    sum(epls.logtot2003) as log_tot_03,
    sum(epls.logtot2002) as log_tot_02,
    sum(epls.logtot2001) as log_tot_01,
    sum(epls.logtot2000) as log_tot_00
     
    FROM
    meddtl.epls
     
    WHERE codgeo IN('17093', '17140')
     
    JOIN tables_de_references.commune ON meddtl.epls.codgeo = commune.codgeo
    JOIN tables_de_references.plh ON commune.plh_ccio = plh.code_plh
    GROUP BY commune.codgeo) as complet
    ORDER BY libelle_geo,log_tot_10;
    Comme ça, cela ne marche pas. Et il faudrait en plus que les sum n'additionne bien que les communes répondant à la clause WHERE

    Pour mon deuxième problème, j'ai bien placer ORDER BY à la fin mais ça ne fonctionne pas...

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 244
    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 244
    Points : 12 878
    Points
    12 878
    Par défaut
    Bonjour,
    La clause WHERE doit se trouver après les jointures.

    Tatayo.

  5. #5
    Membre à l'essai
    Inscrit en
    Mars 2009
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 31
    Points : 10
    Points
    10
    Par défaut
    ok merci.

    Bon alors là, le message d'erreur indique

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ERREUR:  la référence à la colonne « codgeo » est ambigu
    LINE 44: WHERE codgeo IN('17093', '17140')

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 244
    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 244
    Points : 12 878
    Points
    12 878
    Par défaut
    C'est normal, cette colonne est dans 2 tables: meddtl.epls.codgeo et commune.codgeo.
    Il faut préfixer avec le nom de la table, sinon le moteur ne sait pas de quelle table il s'agit.

    Tatayo.

  7. #7
    Membre à l'essai
    Inscrit en
    Mars 2009
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 31
    Points : 10
    Points
    10
    Par défaut
    Parfait! Ca marche! Il ne reste plus qu'à ordonner correctement:

    commune
    plh

    Pour comparaison, cette requête ordonne bien selon:

    commune
    scot

    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
     
    SELECT libelle_geo,log_tot_10,log_tot_09,log_tot_08,log_tot_07,log_tot_06,log_tot_05,log_tot_04,log_tot_03,log_tot_02,log_tot_01,log_tot_00 FROM(
    SELECT
    scot.libelle_scot as libelle_geo,
    sum(epls.logtot2010) as log_tot_10,
    sum(epls.logtot2009) as log_tot_09,
    sum(epls.logtot2008) as log_tot_08,
    sum(epls.logtot2007) as log_tot_07,
    sum(epls.logtot2006) as log_tot_06,
    sum(epls.logtot2005) as log_tot_05,
    sum(epls.logtot2004) as log_tot_04,
    sum(epls.logtot2003) as log_tot_03,
    sum(epls.logtot2002) as log_tot_02,
    sum(epls.logtot2001) as log_tot_01,
    sum(epls.logtot2000) as log_tot_00
     
    FROM
    meddtl.epls
    JOIN tables_de_references.commune ON meddtl.epls.codgeo = commune.codgeo
    JOIN tables_de_references.scot ON commune.scot=scot.code_scot
    GROUP BY scot.code_scot
     
    UNION
     
    SELECT
    commune.libelle_commune as libelle_geo,
    sum(epls.logtot2010) as log_tot_10,
    sum(epls.logtot2009) as log_tot_09,
    sum(epls.logtot2008) as log_tot_08,
    sum(epls.logtot2007) as log_tot_07,
    sum(epls.logtot2006) as log_tot_06,
    sum(epls.logtot2005) as log_tot_05,
    sum(epls.logtot2004) as log_tot_04,
    sum(epls.logtot2003) as log_tot_03,
    sum(epls.logtot2002) as log_tot_02,
    sum(epls.logtot2001) as log_tot_01,
    sum(epls.logtot2000) as log_tot_00
     
    FROM
    meddtl.epls
    JOIN tables_de_references.commune ON meddtl.epls.codgeo = commune.codgeo
    JOIN tables_de_references.scot ON commune.scot=scot.code_scot
    GROUP BY commune.codgeo) as complet
    ORDER BY libelle_geo,log_tot_10;

  8. #8
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    modifiez la clause order by selon vos besoins... et lisez le lien linkez il répondra à beaucoup des questions que vous vous posez

  9. #9
    Membre à l'essai
    Inscrit en
    Mars 2009
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 31
    Points : 10
    Points
    10
    Par défaut
    Ok merci !!!
    Pour l'instant je n'arrive pas à trouver le bon ordre mais ça va venir .
    De quel lien parlez-vous?

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 21/01/2011, 10h17
  2. portée d'une variable dans une fonction dans une méthode
    Par laurentg2003 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 29/06/2009, 19h05
  3. [POO] dans une classe, appeler une fonction dans une méthode
    Par arnaudperfect dans le forum Langage
    Réponses: 3
    Dernier message: 26/08/2007, 23h04
  4. Envoyer une formulaire dans une page dans une Frame
    Par zooffy dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 29/06/2007, 10h13
  5. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48

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