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 103
    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 103
    Points : 8 216
    Points
    8 216
    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
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  3. #3
    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 912
    Points
    38 912
    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 : 166
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 : 166
Taille : 868 octets
    Merci à toi mais la 1ere proposition est ok, je pars là dessus.
    Merci à tous

+ 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