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 :

Aide automatisation SAS SQL DATA


Sujet :

Langage SQL

  1. #1
    Nouveau Candidat au Club
    Femme Profil pro
    Chargé d'affaire
    Inscrit en
    Juin 2024
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 47
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Juin 2024
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Aide automatisation SAS SQL DATA
    Bonjour,

    J’ai besoin de vos lumières ! Je vais essayer d’être claire dans ma formulation 😊
    Je travaille dans l’environnement SAS Sql.

    1/ J’ai une table SOUSCRIPTIONS qui contient les contrats (ID) avec la date de souscription
    2/ J’ai des tables mensuelles nommées BASE_MMAAAA avec les contrats (ID) et le montant fin de mois

    Je souhaiterais automatiser un code qui me permettent de récupérer de façon automatique pour chacun des contrats de la table SOUSCRIPTIONS, le montant fin de mois correspondant au mois de souscription.
    je vais dans la table BASE_MMAAAA qui correspond pour récupérer le montant.

    Programme de création des tables pour l’exercice :

    /*Création des fichiers*/

    data SOUSCRIPTIONS;
    format date_souscrip date9.;
    input ID date_souscrip : ddmmyy10.;
    cards;
    1 12/03/2024
    2 15/09/2023
    3 18/01/1999
    4 16/06/2001;
    run;

    data base_032024;
    input ID montant;
    cards;
    1 100
    2 150;
    run;

    data base_092023;
    input ID montant;
    cards;
    1 200
    2 250;
    run;

    data base_011999;
    input ID montant;
    cards;
    1 300
    2 350
    3 375;
    run;

    Nom : exo.PNG
Affichages : 85
Taille : 66,7 Ko

    Au final, je souhaiterai une table avec ID - date_souscription - montant ( à la date de souscription)
    J'espère avoir été claire. Merci d'avance !

  2. #2
    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
    Bonjour ImaginSoleil,

    Qu'as-tu déjà testé comme requête(s) ?
    Où rencontres-tu un problème ?
    • Une erreur d'exécution ? Quel est le message associé ?
    • Un résultat erroné ? Quel est le résultat obtenu ?
    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
    Nouveau Candidat au Club
    Femme Profil pro
    Chargé d'affaire
    Inscrit en
    Juin 2024
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 47
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Juin 2024
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Bonsoir al1_21, je suis pas trés calé en macro, avec un collègue nous avions testé ceci mais cela ne donne pas le resultat escompté :

    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
    data _null_;
       set dates end=final;
       call symputx("DATE"||left(_n_),put(date_souscrip,ddmmyy10.));
       if final then call symputx("nbDates",_n_);
    run;
     
     
    %macro PROBLEME;
     
    %do i=1 %to &nbDates;
    options mprint;
    data TableJointe_%sysfunc(putn(%sysfunc(month(%sysfunc(inputn(&&date&i,ddmmyy10.)))),z2.))%sysfunc(year(%sysfunc(inputn(&&date&i,ddmmyy10.))));
       drop date_souscrip;
       merge base_%sysfunc(putn(%sysfunc(month(%sysfunc(inputn(&&date&i,ddmmyy10.)))),z2.))%sysfunc(year(%sysfunc(inputn(&&date&i,ddmmyy10.)))) dates;
       by ID;
    run;
     
    %end;
    %mend;
    %PROBLEME
    je souhaite qu'en fonction de la date de signature la requête aille me chercher le montant dans la table qui correspond au mois année de la signature.

    Cordialement,

  4. #4
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 297
    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 297
    Points : 39 628
    Points
    39 628
    Billets dans le blog
    9
    Par défaut
    Bonjour,

    Le code communiqué n'est pas du SQL, or ici c'est le forum consacré au langage SQL.

    De plus, définir une table par mois est une erreur, ça contraint soit à modifier la requête chaque mois pour mettre le nom de la table "en dur" soit à passer par du SQL dynamique, ce qui complique inutilement la solution, peut pénaliser les performances et rend les études d'impact difficiles.
    Si les volumes stockés sont très important, des centaines de millions de lignes ou plus, il faut ne construire qu'une seule table, mais éventuellement partitionner celle-ci par mois.

  5. #5
    Nouveau Candidat au Club
    Femme Profil pro
    Chargé d'affaire
    Inscrit en
    Juin 2024
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 47
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Juin 2024
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Bonjour Escartefigue,
    Merci d'avoir pris le temps de lire mon pavé!

    En effet je travaille sous Sas avec la possibilité d'écrire en langage Sas via des étape Data ou purement Sql.
    Le sql étant plus connu je me suis raproché de ce forum.

    Mon cas est un exemple des tables que j'ai à dispo et qui sont bien plus consequentes en volumes et pour lesquelles je n'ai pas la main. Les tables sont en dur dans notre SI, je ne fait que requeter dessus.
    Je suis dans l'impasse depuis un moment et suis preneuse d'idées sachant que je ne peux les modifier.

    Merci d'avance.

  6. #6
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 297
    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 297
    Points : 39 628
    Points
    39 628
    Billets dans le blog
    9
    Par défaut
    Une possibilité en SQL standard serait de créer un objet SYNONYM (ou un objet ALIAS selon le SGBD) en début de mois pour pointer sur la table du mois qui vous intéresse.

    create synonym MOIS_ECHU for BASE_052024.

    Ensuite, on requête non pas sur la table, mais sur le synonyme : select [...] from MOIS_ECHU where [...].

    Le mois suivant, on détruit le synonyme et on le recrée sur le nouveau mois. Ainsi, plus besoin de modifier la requête chaque mois, il faut juste passer le script de drop/create du synonyme.

    Ne connaissant pas SAS, je ne sais pas s'il connait les objets SYNONYM ou ALIAS, à vérifier.

  7. #7
    Membre expérimenté
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Septembre 2016
    Messages
    776
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2016
    Messages : 776
    Points : 1 488
    Points
    1 488
    Par défaut
    Citation Envoyé par ImaginSoleil Voir le message
    2/ J’ai des tables mensuelles nommées BASE_MMAAAA avec les contrats (ID) et le montant fin de mois

    Je souhaiterais automatiser un code qui me permettent de récupérer de façon automatique pour chacun des contrats de la table SOUSCRIPTIONS, le montant fin de mois correspondant au mois de souscription.
    je vais dans la table BASE_MMAAAA qui correspond pour récupérer le montant.
    Question : est-ce que la liste des tables est "fixe" ou c'est une "macro" qui les génère ?

    je suggère de créer une vue de l'ensemble des tables (utilisation de "union all") en ajoutant le nom de la table source :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    create view base_2024 as
    select 'base_012024' as source, * from base_012024
    union all
    select 'base_022024' as source, * from base_022024
    union all
    select 'base_032024' as source, * from base_032024
    union all
    select 'base_042024' as source, * from base_042024
    ...
    Si la liste des tables est "fixe" faire la vue une bonne fois pour toutes ;
    Si les tables sont générées par une macro, y intégrer l'Alter de la vue pour intégrer la petite dernière.

    Si la requête porte sur des colonnes indexées, la date par exemple, le surcoût ne devrait pas trop se voir
    Et d'autant plus si la colonne date de la table source est assortie d'une contrainte CHECK (pruning).
    Le savoir est une nourriture qui exige des efforts.

Discussions similaires

  1. Aide automatisation requête SQL
    Par aurelie.b dans le forum Langage SQL
    Réponses: 10
    Dernier message: 17/06/2015, 10h09
  2. Aide Pour Requete SQL Simple ... Merci d'avance :)
    Par thefutureisnow dans le forum Langage SQL
    Réponses: 3
    Dernier message: 09/12/2005, 11h39
  3. aide sur requête sql
    Par Vodkha dans le forum Langage SQL
    Réponses: 9
    Dernier message: 30/08/2005, 17h53
  4. Aide sur Requête SQL
    Par devdev dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 11/05/2005, 12h33

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