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

Requêtes et SQL. Discussion :

Delta entre deux années pour une Analyse croisée.


Sujet :

Requêtes et SQL.

  1. #1
    Membre à l'essai
    Inscrit en
    Mars 2005
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 23
    Points : 17
    Points
    17
    Par défaut Delta entre deux années pour une Analyse croisée.
    Un employé m'est arrivé hier avec un fichier Access contenant les éléments suivants mais je ne suis pas un pro d'Access, donc jai un peu de difficulté à l'aider. Peut-etre que je serai plus chanceux ici avec vous.

    Avec la table : [General Tbl]

    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
    [Adjustment Nbr] [Adjustment Description]|Year|Month|Cost|Rebate
    1		 Blahblah		 |2008|1    |15	 |-10
    1		 Blahblah		 |2008|2    |13	 |-10
    1		 Blahblah		 |2008|3    |12	 |-10
    1		 Blahblah		 |2008|4    |18	 |-10
    1		 Blahblah		 |2008|5    |15	 |-10
    1		 Blahblah		 |2008|6    |10	 |-10
    1		 Blahblah		 |2008|7    |19	 |-10
    1		 Blahblah		 |2008|8    |13	 |-10
    1		 Blahblah		 |2008|9    |11	 |-10
    1		 Blahblah		 |2008|10   |15	 |-10
    1		 Blahblah		 |2008|11   |12	 |-10
    1		 Blahblah		 |2008|12   |14	 |-10
    1		 Blahblah		 |2007|1    |12	 |-10
    1		 Blahblah		 |2007|2    |17	 |-10
    1		 Blahblah		 |2007|3    |16	 |-10
    1		 Blahblah		 |2007|4    |12	 |-10
    1		 Blahblah		 |2007|5    |14	 |-10
    1		 Blahblah		 |2007|6    |10	 |-10
    1		 Blahblah		 |2007|7    |15	 |-10
    1		 Blahblah		 |2007|8    |16	 |-10
    1		 Blahblah		 |2007|9    |11	 |-10
    1		 Blahblah		 |2007|10   |16	 |-10
    1		 Blahblah		 |2007|11   |13	 |-10
    1		 Blahblah		 |2007|12   |17	 |-10
    La Requête

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    PARAMETERS [Which Year? YYYY] Long;
    TRANSFORM IIf(Sum([General Tbl]!Cost+[General Tbl]!Rebate)<>0,Sum([General Tbl]!Cost+[General Tbl]!Rebate),0) AS Expr1
    SELECT 	  [General Tbl].[Adjustment Nbr]
     	, [General Tbl].[Adjustment Description]
    	, [General Tbl].Year
      FROM	  [General Tbl]
     WHERE  (([General Tbl].Year)=[Which Year? YYYY])
     GROUP BY [General Tbl].[Adjustment Nbr]
            , [General Tbl].[Adjustment Description]
            , [General Tbl].Year
     ORDER BY [General Tbl].[Adjustment Nbr]
     PIVOT    [General Tbl].Month In (1,2,3,4,5,6,7,8,9,10,11,12);

    Etat: Year 2008
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Adjustment Nbr  | Month |1 |2 |3 |4 |5 |6 |7 |8 |9 |10|11|12|		
    	1       |       |5$|3$|2$|8$|5$|0$|9$|3$|1$|5$|2$|4$|

    Etat: Year = 2007
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Adjustment Nbr  | Month |1 |2 |3 |4 |5 |6 |7 |8 |9 |10|11|12|		
    	1       |       |2$|7$|6$|2$|4$|0$|5$|6$|1$|6$|3$|7$|
    Question

    On m'a demandé si je pouvais faire un état qui me donnerait, pour chaque Adjustement Nbr], la différence entre le mois de janvier de l'année affichée et le mois de décembre de l'année précédente, ex:


    Etat Voulu: Year 2008
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Adjustment Nbr  | Month | 1 (Delta)| 2  | 3  | 4  | 5  |...
    	1       |         5$(-2$  )| 3$ | 2$ | 8$ | 5$ |...
    	3       |         6$(4$   )| ....
    	15      |         ...
    	34      |
    	...
    En espérant avoir été clair,

    Merci beaucoup !

  2. #2
    Expert confirmé
    Avatar de vodiem
    Homme Profil pro
    Vivre
    Inscrit en
    Avril 2006
    Messages
    2 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Vivre
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 895
    Points : 4 325
    Points
    4 325
    Par défaut
    salut xodblux et bienvenu,

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    PARAMETERS [Which Year? YYYY] Long;
    TRANSFORM First(t1.m) & ' (' & iif(First(t1.m-nz(Lm))>=0,'+') & iif(isnull(First(Lm)),0,First(t1.m-nz(Lm))) & ')' As V
    SELECT t1.[Adjustment Nbr] AS Nbr, t1.[Adjustment Description] AS Description
    FROM
    (
       SELECT t2.[Adjustment Nbr], t2.[Adjustment Description], t2.[Year], t2.[Month], (nz(t2.Cost,0)+nz(t2.Rebate,0)) as m,
          (DLookUp('cost','[General Tbl]','[Year]=' & t2.[Year]-1 & ' AND [Month]=' & t2.[Month] & ' AND [Adjustment Nbr]=' & t2.[Adjustment Nbr] & ' AND [Adjustment Description]=''' & t2.[Adjustment Description] & '''') +
          DLookUp('rebate','[General Tbl]','[Year]=' & t2.[Year]-1 & ' AND [Month]=' & t2.[Month] & ' AND [Adjustment Nbr]=' & t2.[Adjustment Nbr] & ' AND [Adjustment Description]=''' & t2.[Adjustment Description] & '''')) AS Lm
       FROM [General Tbl] t2
    ) AS t1
    WHERE (t1.Year=[Which Year? YYYY])
    GROUP BY t1.[Adjustment Nbr], t1.[Adjustment Description], t1.[Year]
    ORDER BY t1.[Adjustment Nbr]
    PIVOT t1.Month In (1,2,3,4,5,6,7,8,9,10,11,12);
    je ne pense pas que le traitement de la nullité soit pertinente dans ton transform, je l'ai donc modifié.
    j'ai présupposé que tu n'avais qu'une valeur par mois pour une année, Nbr et Description, ce qui explique le First sinon tu peux facilement adapter.

    en revanche, ne t'attends pas à une rapidité sur un grand nombre d'enregistrement.


  3. #3
    Futur Membre du Club
    Inscrit en
    Août 2008
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 9
    Points : 6
    Points
    6
    Par défaut Delta entre deux années pour une Analyse croisée...suite
    Bonjour Vodiem,

    Je suis l'employé qui a demandé de l'aide à Xodblux, nous sommes des collègues de travail. Je voulais commencer par te remercier de ton aide. La requête d'analyse croisée que tu as fournie fonctionne bien.

    Par contre, il y a eu mauvaise communication. Je n'ai pas besoin d'obtenir l'écart pour chaque mois de l'année exemple entre 2008 et 2007. J'ai besoin d'afficher dans mon analyse croisée la valeur de décembre 2007 avec les valeurs des mois de 2008.

    Voici le résultat attendu que j'aimerais obtenir dans ma requête d'analyse croisé:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     				         Mois 	
    No d'ajustement Description  Dec 07 Jan 08  Fev 08  Mar 08
    123	        Blahblah     2,00$  5,00$   3,00$    0,00$
    Les valeurs mensuelles = montant-rabais.
    La raison que mon "Transform" original exige le traitement des nullités était d'obtenir dans mon résultat un 0$ s'il n'y avait aucun montant/rabais pour un mois & ajustement donné.

    TRANSFORM IIf(Sum([General Tbl]!Cost+[General Tbl]!Rebate)<>0,Sum([General Tbl]!Cost+[General Tbl]!Rebate),0)

    Si j'obtiens dans la requête d'analyse croisée ce résultat je vais pouvoir afficher dans l'État sous des colonnes séparées le delta en % de chaque mois pour l'année entrée par la personne qui utilisera la BD.

    Exemple:
    Prompt......Quelle Année? YYYY
    Réponse entrée = 2008

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Etat:
    Année:2008							
    		                Jan 	  Fev	    Mar
    No d'ajustement   Description  $    %	 $    %    $   %
    123	          Blahblah     5$  150%  3$ -40%    etc
    Mon problème était d'afficher le montant-rabais de décembre de l'année suivante pour ainsi calculer dans mon état l'écart en % de janvier 2008 puisque que mon prompt forçait comme résultats les valeurs de 2008 seulement.

    Je suis désolé de la confusion et j'apprécie énormément ton aide.
    Merci

  4. #4
    Expert confirmé
    Avatar de vodiem
    Homme Profil pro
    Vivre
    Inscrit en
    Avril 2006
    Messages
    2 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Vivre
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 895
    Points : 4 325
    Points
    4 325
    Par défaut
    salut doudou31 et bienvenu,

    Citation Envoyé par doudou31
    le traitement des nullités était d'obtenir dans mon résultat un 0$ s'il n'y avait aucun montant/rabais pour un mois & ajustement donné
    oui mais si tu as un montant null ou un rabais null la somme est null.
    alors que mon calcul ne tiens pas compte de la nullité d'un d'entre eux.
    après cela dépend de ce que tu considères être plus approprié pour toi avoir une valeur null si tu as un des deux champs null ou pas, voir un seul des deux...

    Citation Envoyé par doudou31
    Les valeurs mensuelles = montant-rabais.
    c'est pas plutot montant + rabais?

    Citation Envoyé par doudou31
    Mon problème était d'afficher le montant-rabais de décembre de l'année suivante
    l'année suivante?
    Mois
    No d'ajustement Description Dec 07 Jan 08 Fev 08 Mar 08
    123 Blahblah 2,00$ 5,00$ 3,00$ 0,00$
    dans ton exemple c'est plutot le mois précédent?

    tu peux être plus clair?
    je comprends mieux pourquoi xodblux a fait confusion.

    il faut pas nous perdre dans des explications ambiguës, une description simple parfois suffit:
    à partir de ca, je voudrais ca.
    le pourquoi n'étant pas le sujet, il n'est pas forcement de rigueur.

    pourrais tu donc reformuler autrement afin de le rendre accessible à ma mon cerveau fatigué.

  5. #5
    Futur Membre du Club
    Inscrit en
    Août 2008
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    Salut Vodiem,

    Je crois que c'est mon cerveau qui est aussi fatigue.

    Effectivement les valeurs mensuelles sont obtenues en faisant montant + rabais.

    Mon probleme est d'afficher dans ma requete d'analyse croisee le montant+rabais de decembre de l'annee precedente (2007) en plus des montants + rabais de tous les mois de 2008.

    Si j'ai un montant null alors forcement mon rabais sera null. Mais il est possible d'avoir un montant non null avec un rabais null.
    Exemple:
    montant = 10$ & rabais = 0$ alors valeur = 10$
    montant = 0$ alors rabais = 0$ alors valeur = 0$

    Puisque mon rapport est base sur une annee, il est possible qu'il n'y a pas d'ajustement no 123 (montant = 0$) donc pas de rabais (=0$) pour un mois quelconque.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Mes donnees
    No adjustement        description       mois      montant   rabais     total
    123		      blahblah	        Dec 07    3$	    -1$	       2$
                                            Jan 08    5$	    0$	       5$	 
    					Mar 08    8$	    -4$	       4$
     
     
    Resultat voulu
    Requete Analyse croisee
     
    No adjustement        description       Dec   Jan    Fev   Mar
    123		      blahblah	        2$     5$     0$    4$
    Merci

  6. #6
    Expert confirmé
    Avatar de vodiem
    Homme Profil pro
    Vivre
    Inscrit en
    Avril 2006
    Messages
    2 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Vivre
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 895
    Points : 4 325
    Points
    4 325
    Par défaut
    par rapport à la requete que tu as, tu veux en fait juste rajouter le mois de décembre de l'année précédente?

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    PARAMETERS [Which Year? YYYY] Long;
    TRANSFORM First(IIf(IsNull(t1.Cost),0,t1.Cost+nz(t1.Rebate,0))) AS v
    SELECT t1.[Adjustment Nbr] AS Nbr, t1.[Adjustment Description] AS Description
    FROM [General Tbl] AS t1
    WHERE (((t1.Year)=[Which Year? YYYY])) OR (((t1.Year)=[Which Year? YYYY]-1) AND ((t1.Month)=12))
    GROUP BY t1.[Adjustment Nbr], t1.[Adjustment Description]
    ORDER BY t1.[Adjustment Nbr]
    PIVOT IIf(t1.Year=[Which Year? YYYY]-1,"LastDec",Format(t1.month,"00")) In ("LastDec","01","02","03","04","05","06","07","08","09","10","11","12");

    j'en encore changé le mode de calcul...
    quand on parle de nullité d'un champ c'est que sa valeur n'existe pas, et non qu'elle soit égale à zéro.

    avec ta formule:
    [General Tbl]!Cost+[General Tbl]!Rebate
    si Cost est saisie et que Rebate n'a pas de valeur > le résulat est: "null" (=pas de valeur) ce qui ne correspond pas visiblement à la description que tu voudrais.
    la nuance de ma dernière formule par rapport à l'autre que j'ai donné est que si montant n'existe pas et rabais existe => 0.


  7. #7
    Futur Membre du Club
    Inscrit en
    Août 2008
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    Salut Vodiem,

    la requête d'analyse croisée fonctionne à merveille!

    Merci beaucoup de ton aide

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

Discussions similaires

  1. [Toutes versions] algorithme ou matrice pour déterminer des cellules entre deux cellules formant une plage
    Par patricktoulon dans le forum Macros et VBA Excel
    Réponses: 16
    Dernier message: 01/04/2013, 19h01
  2. [XL-2003] Evolution entre deux années dont une est négative
    Par woods27260 dans le forum Excel
    Réponses: 6
    Dernier message: 03/04/2012, 21h16
  3. [AC-2007] Relation entre deux requêtes pour rechercher une valeur de champs commune
    Par Debutant10 dans le forum Requêtes et SQL.
    Réponses: 14
    Dernier message: 01/11/2011, 15h25
  4. Difference entre deux dates pour une alertes
    Par litlepom dans le forum Langage SQL
    Réponses: 3
    Dernier message: 17/05/2010, 18h59
  5. calcul d'une somme entre deux années
    Par alex77140 dans le forum IHM
    Réponses: 5
    Dernier message: 08/07/2008, 09h00

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