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 en fonction du mois en cours


Sujet :

Langage SQL

  1. #1
    Candidat au Club
    Femme Profil pro
    Webmarketer
    Inscrit en
    Décembre 2018
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Webmarketer

    Informations forums :
    Inscription : Décembre 2018
    Messages : 7
    Points : 4
    Points
    4
    Par défaut Requête SQL en fonction du mois en cours
    Bonjour,

    Novice en requêtes SQL, j'ai besoin d'un coup de pouce svp... Pouvez-vous m'aider à construire 1 seule et même requête SQL disant :


    SELECT* (les champs que je souhaite)

    les contacts de la table CONTACT qui ont dans le champ 'Region' la valeur 'Corse' SI nous sommes au mois de janvier (de l'année en cours)

    les contacts de la table CONTACT qui ont dans le champ 'Region' la valeur 'Occitanie' SI nous sommes au mois de février (de l'année en cours)

    les contacts de la table CONTACT qui ont dans le champ 'Region' la valeur 'Nouvelle Aquitaine' SI nous sommes au mois de mars (de l'année en cours)

    AND* (critères génériques pour tous)


    Je suis bloquée... En gros je souhaite sélectionner les contacts d'une région en fonction du mois en cours.

    Je vous remercie !

  2. #2
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 197
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 197
    Points : 8 412
    Points
    8 412
    Billets dans le blog
    17
    Par défaut
    Tu peux utiliser l'opérateur CASE :

    select all tes_colonnes
    from contact as c
    where true
    	and case month(current_date)
    		when 1 then c.region = 'Corse'
    		when 2 then c.region = 'Occitanie'
    		when 3 then c.region = 'Nouvelle Aquitaine'
    		else true -- Les autres mois, on prend tout, à compléter...
    	end
    	and autres_critères
    ;
    https://dev.mysql.com/doc/refman/8.0...#operator_case

  3. #3
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 299
    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 299
    Points : 39 635
    Points
    39 635
    Billets dans le blog
    9
    Par défaut
    Autre solution, utiliser une table qui associe les mois et les régions.


    Exemple :

    Code SQL : 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
    with CT_contact(CT_ident, CT_nom, CT_region) as
        (select 1, 'dupond', 'occitanie'    union all
         select 2, 'rossi', 'corse'         union all
         select 3, 'abadie', 'aquitaine'    union all
         select 4, 'leblanc', 'occitanie'   union all
         select 5, 'martin', 'aquitaine'    union all
         select 6, 'zorglub', 'corse'
        )
       , PE_periode(PE_mois, PE_lib, PE_region) as
        (select 1, 'janvier', 'corse'       union all
         select 2, 'février', 'occitanie'   union all
         select 3, 'mars', 'aquitaine'      union all
         select 4, 'avril', 'alsace'
        )
    select CT_nom
    from CT_contact
    inner join PE_periode
       on PE_region = CT_region
    where PE_mois = month(getdate()) 
    order by CT_nom


    Résultat :

    Nom : Sans titre.png
Affichages : 285
Taille : 868 octets

  4. #4
    Candidat au Club
    Femme Profil pro
    Webmarketer
    Inscrit en
    Décembre 2018
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Webmarketer

    Informations forums :
    Inscription : Décembre 2018
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    Merci pour ton aide ! J'ai corrigé un peu pour que ça marche, voilà ce que ca donne au final et cela fonctionne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT *
    WHERE 
    (
        (MONTH(GETDATE()) = 1 AND c.region = 'Corse')
        OR (MONTH(GETDATE()) = 2 AND c.region = 'Occitanie')
        OR (MONTH(GETDATE()) = 3 AND (c.region = 'Nouvelle Aquitaine')
    ......
    AND *

  5. #5
    Candidat au Club
    Femme Profil pro
    Webmarketer
    Inscrit en
    Décembre 2018
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Webmarketer

    Informations forums :
    Inscription : Décembre 2018
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par escartefigue Voir le message
    Autre solution, utiliser une table qui associe les mois et les régions.


    Exemple :

    Code SQL : 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
    with CT_contact(CT_ident, CT_nom, CT_region) as
        (select 1, 'dupond', 'occitanie'    union all
         select 2, 'rossi', 'corse'         union all
         select 3, 'abadie', 'aquitaine'    union all
         select 4, 'leblanc', 'occitanie'   union all
         select 5, 'martin', 'aquitaine'    union all
         select 6, 'zorglub', 'corse'
        )
       , PE_periode(PE_mois, PE_lib, PE_region) as
        (select 1, 'janvier', 'corse'       union all
         select 2, 'février', 'occitanie'   union all
         select 3, 'mars', 'aquitaine'      union all
         select 4, 'avril', 'alsace'
        )
    select CT_nom
    from CT_contact
    inner join PE_periode
       on PE_region = CT_region
    where PE_mois = month(getdate()) 
    order by CT_nom


    Résultat :

    Nom : Sans titre.png
Affichages : 285
Taille : 868 octets
    Merci à toi mais la 1ere proposition est ok, je pars là dessus.
    Merci à tous

  6. #6
    Nouveau Candidat au Club
    Homme Profil pro
    retraité
    Inscrit en
    Juillet 2024
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2024
    Messages : 15
    Points : 0
    Points
    0
    Par défaut suggestion a la question contact
    bonjour,

    jean-jacques developpeur SQL Retraité

    vous pouvez essayer ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    select distinct Table1.matricule,
    decode(to_date(sysdate,'MM'),'01',decode(region,'Corse', C.Contact1),
    decode(to_date(sysdate,'MM'),'02',decode(region,'Occitanie', C.Contact1),
    decode(to_date(sysdate,'MM'),'03',decode(region,'Nouvelle aquitaine', C.Contact1)
    decode(to_date(sysdate,'MM'),'01',decode(region,'Corse', C.Contact2),
    decode(to_date(sysdate,'MM'),'02',decode(region,'Occitanie', C.Contact2),
    decode(to_date(sysdate,'MM'),'03',decode(region,'Nouvelle aquitaine', C.Contact2)
    from table1,Contact C
    where Table1.matricule.c.matricule

  7. #7
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 099
    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 099
    Points : 28 400
    Points
    28 400
    Par défaut
    Il n'est pas indispensable de répondre aux questions quand on n'a pas de réponse valable à apporter. De surcroit lorsque le problème est déjà résolu.

    Deux incongruités dans cette requête :
    • DECODE n'est pas une fonction du langage SQL normalisé.
    • Cela fait plusieurs décennies qu'on n'effectue plus de jointures en posant une restriction sur un produit cartésien.
      C'est l'opérateur JOIN qui doit être utilisé.
    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.

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

Discussions similaires

  1. Selection d'une page en fonction du mois en cours
    Par juni0r dans le forum Général JavaScript
    Réponses: 15
    Dernier message: 10/01/2011, 13h12
  2. [HTML 5] Selection d'une page en fonction du mois en cours
    Par juni0r dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 08/01/2011, 10h17
  3. Affichage des données en fonction du mois en cours
    Par zwark dans le forum ADO.NET
    Réponses: 1
    Dernier message: 02/06/2010, 13h21
  4. [XL-2007] Calcul "glissant" fonction du mois en cour
    Par Hervé40 dans le forum Excel
    Réponses: 2
    Dernier message: 12/05/2010, 21h52
  5. [Dates] Créer un lien en fonction du mois en cours
    Par MTF Karukera dans le forum Langage
    Réponses: 4
    Dernier message: 05/11/2006, 11h37

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