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

Développement SQL Server Discussion :

Calculer des évolutions


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 61
    Par défaut Calculer des évolutions
    Bonjour

    J'ai la table décrite ci dessous, qui liste le prix d'un produit en fonction de date.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    ID_Produit 	DateDeb 	DateFin 	Prix
    XXX	        01/01/2007	01/01/2008	10
    XXX	        02/01/2008	01/01/2009	11
    XXX	        02/01/2009		        12
    ZZZ	        02/01/2008	01/01/2009	13
    ZZZ	        02/01/2009		        15
    Je souhaite ajouter 2 colonnes qui pour chaque ligne rappelle le prix précédent (s'il existe) et calcule l'évolution du prix afin d'obtenir la table suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    ID_Produit 	DateDeb 	DateFin 	Prix	AncienPrix	Evolution
    XXX		01/01/2007	01/01/2008	10		
    XXX		02/01/2008	01/01/2009	11	10		110%
    XXX		02/01/2009			12	11		109%
    ZZZ		02/01/2008	01/01/2009	13		
    ZZZ		02/01/2009			15	13		115%
    Avez vous une idée sur la façon de procéder en SQL ou via SSIS ?

    Merci

    Achestyx

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 61
    Par défaut
    Re,


    Je pense que je pourrais m'en sortir facilement avec un update à condition de pouvoir attribuer un numéro à chacune de mes lignes de la façon suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    ID_Produit 	DateDeb 	DateFin 	Prix	NumLigne
    XXX	        01/01/2007	01/01/2008	10	1
    XXX	        02/01/2008	01/01/2009	11	2
    XXX	        02/01/2009		        12	3
    ZZZ	        02/01/2008	01/01/2009	13	1
    ZZZ	        02/01/2009		        15	2
    Savez vous comment calculer ce nouveau champ NumLigne ?

  3. #3
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 010
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 22 010
    Billets dans le blog
    6
    Par défaut
    Voici la requête à faire. Un update est stupide !

    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
    WITH 
    P AS
    (SELECT ID_Produit, DateDeb, DateFin, Prix
     FROM   Produit),
    PP AS
    (SELECT P.ID_Produit, P.DateDeb, MAX(P1.DateDeb) AS DatePrec
     FROM   Produit P1
            INNER JOIN P
                  ON P1.ID_Produit = P.ID_Produit
     WHERE  P1.DateFin < P.DateDeb
     GROUP  BY P.ID_Produit, P.DateDeb)
    SELECT  P.*, PD.Prix AS AncienPrix, 
            100 * ((P.Prix - PD.Prix) / P.Prix) AS Evolution_PC
    FROM    P
            LEFT OUTER JOIN PP
                  ON P.ID_Produit = PP.ID_Produit 
                     AND P.DateDeb = PP.DateDeb 
            LEFT OUTER JOIN P AS PD
                  ON PP.ID_Produit = PD.ID_Produit 
                     AND PD.DateDeb = PP.DatePrec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    ID_Produit DateDeb     DateFin     Prix           AncienPrix      Evolution_PC
    ---------- ----------- ----------- -------------- --------------- ---------------------
    XXX        2007-01-01  2008-01-01  10.00          NULL            NULL
    XXX        2008-02-01  2009-01-01  11.00          10.00           9.09090909090909090
    XXX        2009-02-01  NULL        12.00          11.00           8.33333333333333333
    ZZZ        2008-02-01  2009-01-01  13.00          NULL            NULL
    ZZZ        2009-02-01  NULL        15.00          13.00           13.33333333333333333
    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 61
    Par défaut
    Merci pour la réponse.

    J'ai fait 1 petite modification et j'obtiens exactement le résultat attendu...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    -- Modification de la jointure pour ne pas avoir le dernier prix car j'ai des chaines vides et non du null.
    WHERE  P1.DateFin < P.DateDeb AND  P1.DateDeb <> P.DateDeb 
    Merci encore

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

Discussions similaires

  1. [LG]Calcul des 15 premiers nombres premiers
    Par yffick dans le forum Langage
    Réponses: 12
    Dernier message: 18/09/2004, 14h57
  2. [DBA] Calcul des Statistiques sans privilèges DBA
    Par Krashtest dans le forum Administration
    Réponses: 14
    Dernier message: 06/05/2004, 16h08
  3. calculs des points
    Par rabi dans le forum OpenGL
    Réponses: 11
    Dernier message: 12/02/2004, 10h03
  4. Calcul des jours feriés
    Par obione dans le forum Langage
    Réponses: 5
    Dernier message: 07/11/2003, 12h36
  5. Calcul des numéros de semaine d'un calendrier
    Par Invité dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 06/11/2002, 21h29

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