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

SQL Oracle Discussion :

[10G] Comparer des enregistrements de versements année / année-1


Sujet :

SQL Oracle

  1. #1
    Membre éprouvé Avatar de shaun_the_sheep
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Octobre 2004
    Messages
    1 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 619
    Par défaut [10G] Comparer des enregistrements de versements année / année-1
    bonjour,

    je dois comparer des enregistrements de versements pour un même client pour l'année en cours par rapport à l'année dernière.

    L'idee étant de savoir si les versements précédents sont supérieurs ou non.
    Ex: 2011 -> 1000 / 2012 -> 2000 / ecart + 1000.

    je somme pour mon client les enregistrements de l'année :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     SUM(COALESCE(d.cont_amount, 0))
    et je somme pour les derniers versements :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    COALESCE(LAG(SUM(COALESCE(d.cont_amount, 0))) OVER(partition BY t.contact_id ORDER BY h.year_no ASC),0)
    j'ai un soucis car dans le cas ou je n'ai pas d'enregistrement pour 2011 , il me prend 2010 qui est le dernier versement en référence ect alors que j'aurai aimé avoir 2011 ....

    pour avoir :
    Ex: 2011 -> 0 / 2012 -> 2000 / ecart + 2000.
    et pas
    2010 -> 1000 / 2012 -> 2000 / ecart + 1000.

    auriez vous une idée pour solutionner mon probleme ?
    Merci par avance.

  2. #2
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Faite une jointure (externe) entre les données du 2011 et ceux de 2012 et gardez ce que vous intéresse.

    <Edit>
    Ou testez Lag (exercice) pour vérifier qu'il est bien n-1
    </Edit>

  3. #3
    Membre éprouvé Avatar de shaun_the_sheep
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Octobre 2004
    Messages
    1 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 619
    Par défaut
    Merci à vos.
    Cependant j'avoue ne pas comprendre votre solution car mes données sont dans la même table. je ne vois pas comment etablir cet jointure en faite.

  4. #4
    Membre éprouvé
    Inscrit en
    Septembre 2008
    Messages
    101
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 101
    Par défaut
    Peut etre simplement avec une restriction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Select Sum(...)
    From MaTable
    Where Annee between 2011 and 2012
    Si ce n'est pas suffisant on peut ajouter des lignes à zéro :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Select Sum(...)
    From (
    Select Annee, Id, Montant from Matable Where Annee between 2011 and 2012
    Union All
    Select 2011, Id, 0 from Matable T Where Annee = 2012 And not Exists(Select 1 From MaTable TT Where T.ID = TT.ID And TT.Annee = 2011)
    )

  5. #5
    Membre éprouvé Avatar de shaun_the_sheep
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Octobre 2004
    Messages
    1 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 619
    Par défaut
    bonjour,

    merci pour ces pistes. je ne l'ai pas spécialement précisé mais j'utilise une vue.
    le passage de paramétre me prose donc un réel soucis.
    merci pour l'aide que vous pourriez m'apporter.

  6. #6
    LEK
    LEK est déconnecté
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    715
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 715
    Par défaut
    Peut-être quelquechose dans ce goût là :
    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
     
    with sumbyyear as (
        select 10 mnt , 2009 an from dual
        union
        select 25 mnt , 2010 an from dual
        union
        select 30 mnt , 2012 an from dual
    )
    select 
        mnt,
        an,
        case when (an - nvl(  (lead(an) over(order by an desc)) ,an) =1 ) then
            mnt-lead(mnt) over(order by an desc)
        else
            mnt
        end gain 
    from sumbyyear    
    order by an desc
    en fait à quelquechose prêt ca rejoint la proposition d'exercice de mnitu... j'en avais justement besoin aussi ;-)

  7. #7
    Membre éprouvé Avatar de shaun_the_sheep
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Octobre 2004
    Messages
    1 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 619
    Par défaut
    Bonjour,

    Je viens de reprendre mes travaux sur ce sujet.

    L'exemple transmis m'a permis d'avancer sur le sujet.

    Merci à vous

  8. #8
    LEK
    LEK est déconnecté
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    715
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 715
    Par défaut
    Il n'y a pas de quoi, je travailles aussi à m'améliorer sur les fonctions analytiques ;-)

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 26/05/2015, 18h52
  2. [WD-2007] Publipostage : comparer des enregistrements
    Par tipotam dans le forum Word
    Réponses: 2
    Dernier message: 20/03/2013, 11h35
  3. Comparer des dates sans utiliser les années
    Par maireg dans le forum Requêtes
    Réponses: 12
    Dernier message: 10/05/2011, 23h49
  4. Comparer des enregistrements
    Par piflechien73 dans le forum VBA Access
    Réponses: 3
    Dernier message: 14/08/2009, 15h31
  5. [requête sql]comment comparer des enregistrements de deux tables
    Par DSabah dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 01/06/2007, 15h12

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