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

Requêtes et SQL. Discussion :

coder un cycle de planification


Sujet :

Requêtes et SQL.

  1. #1
    Membre à l'essai
    Femme Profil pro
    Chargé d'affaire
    Inscrit en
    Mars 2020
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Canada

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Mars 2020
    Messages : 12
    Points : 10
    Points
    10
    Par défaut coder un cycle de planification
    Bonjour,
    JE dois coder une colonne dont la logique pour cette colonne est que chaque période de trois ans (en utilisant le StartDate pour le chargement de la dimension date) est un cycle stratégique. Donc, si le StartDate est le 1er Janvier 2010, les années 2010, 2011 et 2012 seront le premier cycle (donc la colonne dans la dimension date devra prendre la valeur 1). Les années 2013, 2014 et 2015 seront le deuxième cycle (donc la colonne cycle=2). Avec la même logique pour chaque période de 3 années subséquente.

    ce que j'ai codé ne marche pas :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    case when DATEDIFF(year, @StartDate, @EndDate) = 1 then '1'  
    	     when DATEDIFF(year, @StartDate, @EndDate) = 2 then '1'  
    		 when DATEDIFF(year, @StartDate, @EndDate) = 3 then '1'  
    		 when DATEDIFF(year, @StartDate, @EndDate) = 4 then '2'   
    		 when DATEDIFF(year, @StartDate, @EndDate) = 5 then '2'  
    		 when DATEDIFF(year, @StartDate, @EndDate) = 6 then '2'  
    		 when DATEDIFF(year, @StartDate, @EndDate) = 7 then '3' 
    		 when DATEDIFF(year, @StartDate, @EndDate) = 8 then '3'
    		 when DATEDIFF(year, @StartDate, @EndDate) = 9 then '3'     
    		 end
    Merci de m'aider

    @

  2. #2
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    Mai 2005
    Messages
    2 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : consultant développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 878
    Points : 4 754
    Points
    4 754
    Par défaut
    Bonjour,

    A déclarer dans un module standard
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Public Function dim_period_3years(startdate As Date) As Long
    Dim y1 As Long
    y1 = Year(startdate) - 2000 + 1
    dim_period_3years = Int(y1 / 3) - 6
    End Function
    que tu peux utiliser dans une requete : SELECT ... , dim_period_3years([Startdate]) AS Cycle, ...



    Cdlt
    "Always look at the bright side of life." Monty Python.

  3. #3
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 637
    Points : 14 611
    Points
    14 611
    Par défaut
    bonjour,
    ce que j'ai codé ne marche pas :
    case when DATEDIFF(year, @StartDate, @EndDate) = 1 then '1'
    CASE WHEN est une syntaxe SQL Oracle, mysSQL ou Postgre SQL ou autre ... mais ne fonctionne pas sous Access.

    Peux-tu préciser sur quel logiciel tu travailles et si c'est bien Access et dans quel environnement VBA, SQL ?
    Dans le cas d'utilisation dans SQL, il faut utiliser Switch (PremVrai en français):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT etc..., Switch(DATEDIFF("y", StartDate, EndDate) = 1, "1", DATEDIFF("y", StartDate, EndDate) = 2 , "1", DATEDIFF("y", StartDate, EndDate) = 3 , "1", DATEDIFF("y", StartDate, EndDate) = 4 , "2", DATEDIFF("y", StartDate, EndDate) = 5 , "2", DATEDIFF("y", StartDate, EndDate) = 6 , "2", DATEDIFF("y", StartDate, EndDate) = 7 , "3", DATEDIFF("y", StartDate, EndDate) = 8 , "3", DATEDIFF("y", StartDate, EndDate) = 9 , '3') As Cycle, etc...
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  4. #4
    Membre à l'essai
    Femme Profil pro
    Chargé d'affaire
    Inscrit en
    Mars 2020
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Canada

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Mars 2020
    Messages : 12
    Points : 10
    Points
    10
    Par défaut
    Citation Envoyé par tee_grandbois Voir le message
    bonjour,


    CASE WHEN est une syntaxe SQL Oracle, mysSQL ou Postgre SQL ou autre ... mais ne fonctionne pas sous Access.

    Peux-tu préciser sur quel logiciel tu travailles et si c'est bien Access et dans quel environnement VBA, SQL ?
    Dans le cas d'utilisation dans SQL, il faut utiliser Switch (PremVrai en français):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT etc..., Switch(DATEDIFF("y", StartDate, EndDate) = 1, "1", DATEDIFF("y", StartDate, EndDate) = 2 , "1", DATEDIFF("y", StartDate, EndDate) = 3 , "1", DATEDIFF("y", StartDate, EndDate) = 4 , "2", DATEDIFF("y", StartDate, EndDate) = 5 , "2", DATEDIFF("y", StartDate, EndDate) = 6 , "2", DATEDIFF("y", StartDate, EndDate) = 7 , "3", DATEDIFF("y", StartDate, EndDate) = 8 , "3", DATEDIFF("y", StartDate, EndDate) = 9 , '3') As Cycle, etc...
    -------------
    Bonjour
    C'est sur SQL, c'est une table de dimension date avec un CTE
    Merci bcp
    @

  5. #5
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 637
    Points : 14 611
    Points
    14 611
    Par défaut
    C'est sur SQL, c'est une table de dimension date avec un CTE
    une petite traduction ?
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  6. #6
    Membre à l'essai
    Femme Profil pro
    Chargé d'affaire
    Inscrit en
    Mars 2020
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Canada

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Mars 2020
    Messages : 12
    Points : 10
    Points
    10
    Par défaut
    Citation Envoyé par micniv Voir le message
    Bonjour,

    A déclarer dans un module standard
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Public Function dim_period_3years(startdate As Date) As Long
    Dim y1 As Long
    y1 = Year(startdate) - 2000 + 1
    dim_period_3years = Int(y1 / 3) - 6
    End Function
    que tu peux utiliser dans une requete : SELECT ... , dim_period_3years([Startdate]) AS Cycle, ...



    Cdlt
    ------
    voulez-vous détailler un peu stp?

  7. #7
    Membre à l'essai
    Femme Profil pro
    Chargé d'affaire
    Inscrit en
    Mars 2020
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Canada

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Mars 2020
    Messages : 12
    Points : 10
    Points
    10
    Par défaut
    Citation Envoyé par tee_grandbois Voir le message
    une petite traduction ?

    la requête en question on peut l'utiliser dans n'importe quelle table sur une colonne!
    table dimension Date est une table parmi d'autres pour le processus ETL en SQL.
    CTE:stands for common table expression

    mais je n'ai pas tjr de résultat
    À+

  8. #8
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 637
    Points : 14 611
    Points
    14 611
    Par défaut
    la requête en question on peut l'utiliser dans n'importe quelle table sur une colonne!
    table dimension Date est une table parmi d'autres pour le processus ETL en SQL.
    et tu travailles avec Access ou pas ?
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  9. #9
    Membre à l'essai
    Femme Profil pro
    Chargé d'affaire
    Inscrit en
    Mars 2020
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Canada

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Mars 2020
    Messages : 12
    Points : 10
    Points
    10
    Par défaut
    Citation Envoyé par tee_grandbois Voir le message
    et tu travailles avec Access ou pas ?
    sur SQL

  10. #10
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 637
    Points : 14 611
    Points
    14 611
    Par défaut
    SQL n'est pas un logiciel mais un langage
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  11. #11
    Membre à l'essai
    Femme Profil pro
    Chargé d'affaire
    Inscrit en
    Mars 2020
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Canada

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Mars 2020
    Messages : 12
    Points : 10
    Points
    10
    Par défaut
    Citation Envoyé par tee_grandbois Voir le message
    SQL n'est pas un logiciel mais un langage
    Depuis mon premier message je parle du language SQL, alors c'est une évidence !!!
    JE ne travaille pas avec Access
    et j'ai trouvé la solution
    Merci

  12. #12
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    Mai 2005
    Messages
    2 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : consultant développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 878
    Points : 4 754
    Points
    4 754
    Par défaut
    alors j'explique un peu ma solution :

    dans Cycle, il s'agit de placer un chiffre qui type 3 années consécutives depuis 2020.
    dim_period_3years est une fonction qui retourne ce chiffre typé Long.
    le code de la fonction est une tambouille arithmétique pour retourner le chiffre souhaité.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Public Function dim_period_3years(startdate As Date) As Long
    Dim y1 As Long
    y1 = Year(startdate) - 2000 + 1       ' ainsi pour startdate=2020 (mais aussi 2021 et 2022) y1= 21, mais aussi
     '                                                 '                     2024 retoune 24 ... etc
    dim_period_3years = Int(y1 / 3) - 6   ' alors (21/3 -6) = 1
    End Function
    j'espère que tu as suivi ...
    et comme je l'ai dit plus haut, tu peux utiliser cette fonction dans une requête, dans un calcul ...
    "Always look at the bright side of life." Monty Python.

  13. #13
    Membre à l'essai
    Femme Profil pro
    Chargé d'affaire
    Inscrit en
    Mars 2020
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Canada

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Mars 2020
    Messages : 12
    Points : 10
    Points
    10
    Par défaut
    Merci beaucoup je vais essayer de l'intégrer dans ma table date avec mes paramètres.
    @

  14. #14
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 637
    Points : 14 611
    Points
    14 611
    Par défaut
    Depuis mon premier message je parle du language SQL, alors c'est une évidence !!!
    JE ne travaille pas avec Access
    il n'est pas évident que nous ne sommes pas sur un sous-forum Access
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

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

Discussions similaires

  1. problème de conception : cycle
    Par FarookFreeman dans le forum Diagrammes de Classes
    Réponses: 13
    Dernier message: 20/10/2005, 10h15
  2. Réponses: 5
    Dernier message: 08/10/2004, 14h40
  3. Coder un binaire PE sans étape de linkage
    Par Asmx86 dans le forum x86 32-bits / 64-bits
    Réponses: 5
    Dernier message: 11/04/2004, 23h07
  4. Réponses: 13
    Dernier message: 07/04/2004, 14h25
  5. Comment coder guillemets et cotes ?
    Par Vow dans le forum XML/XSL et SOAP
    Réponses: 4
    Dernier message: 14/05/2003, 12h11

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