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 :

Optimisation Vue sur 12 mois glissants


Sujet :

Langage SQL

  1. #1
    Membre expert
    Avatar de mout1234
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 2 210
    Points : 3 228
    Points
    3 228
    Par défaut Optimisation Vue sur 12 mois glissants
    Bonjour à tous,

    J'ai besoin de créer une vue représentant des quantités mensuelles par produit, pour les 12 prochains mois (mois en cours inclus).

    Pour cela, je dispose d'une table consituée de la manière suivante:

    tblCalcPrevStockMensuelles

    RefProduit
    Année
    PSM01
    PSM02
    PSM03
    PSM04
    PSM05
    ...

    PSM12
    Où PSM01 à PSM12 contiennentt les quantités de Janvier à Décembre.

    Je dispose dans une autre table contenant qu'un seul enregistrement de l'année et le mois à considérer comme le premier mois.



    J'ai créé la vue correspondant à ce besoin mais j'aimerais trouver une solution plus élégante et plus rapide.


    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    SELECT      tcPSM.RefProduit
     
    		(CASE tIG.MOIS
    			WHEN 1 THEN tcPSM.PSM01
    			WHEN 2 THEN tcPSM.PSM02
    			WHEN 3 THEN tcPSM.PSM03
    			WHEN 4 THEN tcPSM.PSM04
    			WHEN 5 THEN tcPSM.PSM05
    			WHEN 6 THEN tcPSM.PSM06
    			WHEN 7 THEN tcPSM.PSM07
    			WHEN 8 THEN tcPSM.PSM08
    			WHEN 9 THEN tcPSM.PSM09
    			WHEN 10 THEN tcPSM.PSM10
    			WHEN 11 THEN tcPSM.PSM11
    			WHEN 12 THEN tcPSM.PSM12
    			End
    							)  as PSMG1,
    		(CASE tIG.MOIS
    			WHEN 1 THEN tcPSM.PSM02
    			...
    			WHEN 11 THEN tcPSM.PSM12
    			WHEN 12 THEN tcPSM_ASuiv.PSM01
    			End
    							)  as PSMG2,
    		(CASE tIG.MOIS
    			WHEN 1 THEN tcPSM.PSM03
    			...
    			WHEN 9 THEN tcPSM.PSM11
    			WHEN 10 THEN tcPSM.PSM12
    			WHEN 11 THEN tcPSM_ASuiv.PSM01
    			WHEN 12 THEN tcPSM_ASuiv.PSM02
    			End
    							)  as PSMG3,
     
    			....				
     
    		(CASE tIG.MOIS
    			WHEN 1 THEN tcPSM.PSM12
    			WHEN 2 THEN tcPSM_ASuiv.PSM01
    			WHEN 3 THEN tcPSM_ASuiv.PSM02
    			...
    			WHEN 11 THEN tcPSM_ASuiv.PSM10
    			WHEN 12 THEN tcPSM_ASuiv.PSM11
    			End
    							)  as PSMG12
     
    FROM         tblCalcPrevStockMensuelles AS tcPSM INNER JOIN
                          tblInfosGénérales tIG ON tcPSM.Année = tIG.Année INNER JOIN
                          tblCalcPrevStockMensuelles AS tcPSM_ASuiv ON tcPSM.RefProduit = tcPSM_ASuiv.RefProduit AND tcPSM.Canal = tcPSM_ASuiv.Canal AND 
                          CAST(tcPSM.Année AS int) + 1 = CAST(tcPSM_ASuiv.Année AS Int)


    A part, une table temporaire - ce qui me plait encore moins - je ne vois pas d'autres solutions.
    ............................................................................................

    Dans l'intérêt de tous, ne posez pas de questions techniques par messages privés.

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 760
    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 : 21 760
    Points : 52 541
    Points
    52 541
    Billets dans le blog
    5
    Par défaut
    Si votre SGBDR le permet, le mieux est d'utiliser le concept de vue indexées (SQL Server) ou matérialisée (Oracle).
    Dans votre cas le principe serait le suivant :
    1) réaliser une vue indexées par mois/année
    2) à l'aide d'une procédure stockée définir les 11 mois qui utilisent 11 des vues indexées et y rajouter les jours en tête et queue.
    Tout cela concaténé à l'aide d'une opération d'UNION

    Consulté l'article que j'ai écrit à ce sujet : http://sqlpro.developpez.com/optimisation/indexation/

    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/ * * * * *

  3. #3
    Membre expert
    Avatar de mout1234
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 2 210
    Points : 3 228
    Points
    3 228
    Par défaut
    Bonjour Frédéric,

    Merci pour le lien vers ton tuto très intéressant.

    Pour information, mon besoin se situe dans le cadre d'une application Client/Server sous Access 2003 (format mdb) - client Natif SQL Server 2005 - SQL Server 2005.

    J'ai oublié de préciser un point: j'utilise cette vue comme source d'autres vues qui me servent à leur tour de source pour des éditions sous Access. Dans ce contexte, comment pourrais-je utiliser le résultat de la procédure stockée que tu préconises?

    Pour l'heure je vais étudier à tête reposée ton tuto .
    ............................................................................................

    Dans l'intérêt de tous, ne posez pas de questions techniques par messages privés.

Discussions similaires

  1. [XL-2003] calculer des valeurs décalées (sur des mois glissants)
    Par filouhse dans le forum Excel
    Réponses: 1
    Dernier message: 19/05/2010, 20h02
  2. Réponses: 4
    Dernier message: 12/05/2010, 17h30
  3. Requete pour un résultat sur 12 mois glissants
    Par Franck_P dans le forum Développement
    Réponses: 10
    Dernier message: 17/11/2009, 17h53
  4. Recherche par date sur 12 mois glissant
    Par kiki.gaby dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 06/10/2009, 16h17
  5. Somme cumulative sur 12 mois glissant
    Par Ptij16 dans le forum Deski
    Réponses: 6
    Dernier message: 13/07/2007, 10h24

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