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

PL/SQL Oracle Discussion :

Alias dynamique avec sysdate - n days dedans


Sujet :

PL/SQL Oracle

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Février 2007
    Messages
    344
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 344
    Points : 104
    Points
    104
    Par défaut Alias dynamique avec sysdate - n days dedans
    Bonjour,
    je souhaites réaliser une requête qui mettent sous forme de colonnes des dates dynamiques (7 derniers jours incluant ce jour)
    En colonne 1 mon objet
    En colonne 1 la date du jour avec le nombre d'oblets comptabilisés ce jour
    En colonne 2 la date de la veille avec le nombre d'objets comptabilisés la veille
    ---
    ---
    En colonne 7 la date de jour - 6 avec le nombre d'objets comptabilisés il y a 6 jours

    le comptage marche bien mais je n'arrive pas à rendre l'alias dynamique

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    select 
    ct.logon_id,
    sum(case when trunc(create_date)=trunc(sysdate) then 1 else 0 end) as trunc(sysdate),
    sum(case when trunc(create_date)=trunc(sysdate-1) then 1 else 0 end) as trunc(sysdate-1),
    sum(case when trunc(create_date)=trunc(sysdate-2) then 1 else 0 end) as trunc(sysdate-2),
    sum(case when trunc(create_date)=trunc(sysdate-3) then 1 else 0 end) as trunc(sysdate-3),
    sum(case when trunc(create_date)=trunc(sysdate-4) then 1 else 0 end) as trunc(sysdate-4),
    sum(case when trunc(create_date)=trunc(sysdate-5) then 1 else 0 end) as trunc(sysdate-5),
    sum(case when trunc(create_date)=trunc(sysdate-6) then 1 else 0 end) as trunc(sysdate-6)
    le as trunc(sysdate-n) ne marche pas.

    Cdlt
    Laurent

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    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 080
    Points : 30 803
    Points
    30 803
    Par défaut
    Si tu veux un nom de colonne dynamique, il faut créer ta requête dynamiquement...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    DECLARE
        iIncrement  INTEGER;
        Requete     VARCHAR(4000);
    BEGIN
        Requete := 'SELECT ct.logon_id'
        FOR iIncrement IN 0..6 LOOP 
            Requete := Requete || ', SUM(CASE WHEN TRUNC(create_date) = TRUNC(SYSDATE - '
                || TO_CHAR(iIncrement) || ') THEN 1 ELSE 0 END) AS "' || TO_CHAR(TRUNC(SYSDATE - iIncrement)) || '"';
        END LOOP;
        Requete := Requete || ' FROM ...';
        EXECUTE IMMEDIATE Requete;
    END;
    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
    Membre régulier
    Profil pro
    Inscrit en
    Février 2007
    Messages
    344
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 344
    Points : 104
    Points
    104
    Par défaut
    merci,
    je vais essayer mais je n'ai jamais fais de programme !
    Par contre, la ligne 6 avec le FOR, elle est bonne ?
    car quand j'exécute il n'aime pas
    j'ai mis la pj
    Images attachées Images attachées  

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    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 080
    Points : 30 803
    Points
    30 803
    Par défaut
    La ligne 6 est correcte...
    C'est à la fin de la ligne 5 qu'il manque un ;

    Toutefois, ce type de traitement n'a qu'un intérêt cosmétique (il ne joue que sur la présentation)
    Tout dépend de ce que tu dois faire avec le résultat de cette requête. Peut-être serait-il plus intéressant d'effectuer cette mise en forme à partir du traitement qui va récupérer le résultat de la requête
    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.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Février 2007
    Messages
    344
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 344
    Points : 104
    Points
    104
    Par défaut
    L'objectif est de pourvoir comptabiliser pour les 7 dernier jours un nombre de valeur (champ logon_id ici) par jour et d'effectuer une rapide interprétation du résultat (il n'y a pas bcp de valeurs) directement dans PL/SQL sans rebalancer ça dans Excel ou autre.
    Donc il y a un fort intérêt à pouvoir lire les dates dans les en-têtes de colonnes (certes je pourrais mettre des noms de colonnes fixes du type J, J-1, J-2... mais avec les vraies dates ce serait plus parlant).
    Merci encore
    Laurent

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Février 2007
    Messages
    344
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 344
    Points : 104
    Points
    104
    Par défaut
    Ca ne plante plus mais je n'arrive pas à voir le résultat, ça me dit que la requête a été exécutée et puis c'est tout.
    Capture en PJ

    Merci

    LB
    Images attachées Images attachées  

Discussions similaires

  1. Bibliothèque dynamique avec common ???
    Par mehdouchi dans le forum Fortran
    Réponses: 4
    Dernier message: 17/06/2005, 12h05
  2. Réponses: 1
    Dernier message: 04/05/2005, 11h43
  3. [DisplayTag] Créer un lien dynamique avec javascript
    Par babylone7 dans le forum Taglibs
    Réponses: 3
    Dernier message: 20/04/2005, 10h23
  4. [débutant][Conception] Structure dynamique avec Java
    Par blaiseac dans le forum Général Java
    Réponses: 5
    Dernier message: 18/11/2004, 23h00
  5. comment creer un alias dynamique avec BDE et ODBC
    Par david33 dans le forum C++Builder
    Réponses: 2
    Dernier message: 12/07/2002, 11h50

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