Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Rapport des ventes comparatif

11 réponses
Avatar
FidoDido
Bonjour je suis nouveau ici, et j'ai un problème voici mon problème
j,ai une table qui s'appele "Remise" qui comporte les champs suivant
1- Remise ID
2- Date
3- Clients
4- Catégorie
5- Produits
6- Montant

j'ai créer deux requete qui me sort les ventes pour les années 2008 et 2009,
la je voudrais faire une requête, qui me sortirais un rapport mes champs de 1
a 5 plus le champ 6 je voudrais que l'on vois un champ 2008 et 2009 d'ou je
pourrais faire la différence des ventes entre 2009 et 2008, j'ai essayer de
faire une requete UNION, mais j'ai toujours le même problème, a montant (6)
il me sort juste une clonne alors que je voudrais avoir une colonne 2008 et
ne 2009, comment dois-je faire ? merci de votre aide

1 réponse

1 2
Avatar
Michel__D
Ben si tu as plusieurs valeurs par année, tu ne peux en avoir qu'une avec
ce que je t'ai fourni, donc avec :

TRANSFORM First(T3.Montant) AS Valeur
cela te donne la 1ère, sinon avec :

TRANSFORM Last(T3.Montant) AS Valeur
cela te donne la dernière valeur

aprés si cela ne correspond pas au résultat souhaité, il faudra faire autrement.


FidoDido a écrit :
Re bonjour Michel_D, quand je rentre une nouvelle remise, dans la table
remise je vois l'entrée de ma nouvelle remise, mais je ne la vois pas dans la
requete, sauf si je rajoute un nouveau produits la ca marche, donc il cumule
pas les nouvelles entrée si j'ai une nouvelle entrée dans le même produit,
c'est plus compliqué que je le croyais :(

"FidoDido" a écrit :

Tu es un Geni, Genial ca marche, me reste plus qu'a essayer de faire un état
qui va me calcule la différence entre 2009 et 2008.

Merci à Michel_D

"Michel__D" a écrit :

Re,

Ben avec Access il faut réfléchir un peu plus et donc si tu garde le champ
[Daté] tu ne pourras jamais aligner les valeurs de 2008 et de 2009, donc tout
dépend de ce que tu veux; champ [Daté] ou pas (telle est la question).

A tester ce qui suit :

TRANSFORM First(T3.Montant) AS Valeur
SELECT T2.Société, T2.[Region ID], T1.[Catégorie Produits], T1.Produits
FROM Produits AS T1 INNER JOIN (Clients AS T2 INNER JOIN Remise AS T3
ON T2.[Clients ID] = T3.Client) ON T1.[Produits ID] = T3.Produits
GROUP BY T2.Société, T2.[Region ID], T1.[Catégorie Produits], T1.Produits
PIVOT Year(T3.[Daté]);


FidoDido a écrit :
Rebonjour Michel_D,
ca marche ton code, mais j'ai des clients qui ont des remises en 2008 et
2009, mais la j'ai deux lignes pour le même client, ne serais-ce pas possible
de mettre le résultat sur une seul Ligne, car la je me retrouve avec soit un
montant dans la colonne 2008 et aucun montant dans la colle 2009.

je pensais pas que Access était si compliqué :)

"Michel__D" a écrit :

Oui, comme ceci :

SELECT Clients.Société, Clients.[Region ID], Produits.[Catégorie Produits],
Produits.Produits, Remise.Daté, Remise.Montant AS 2008, 0 AS 2009
FROM Produits INNER JOIN (Clients INNER JOIN Remise
ON Clients.[Clients ID] = Remise.Client)
ON Produits.[Produits ID] = Remise.Produits
GROUP BY Clients.Société, Clients.[Region ID], Produits.[Catégorie Produits],
Produits.Produits, Remise.Daté, Remise.Montant
HAVING (((Year([Daté])) 08))
UNION ALL
SELECT Clients.Société, Clients.[Region ID], Produits.[Catégorie Produits],
Produits.Produits, Remise.Daté, 0, Remise.Montant
FROM Produits INNER JOIN (Clients INNER JOIN Remise
ON Clients.[Clients ID] = Remise.Client)
ON Produits.[Produits ID] = Remise.Produits
GROUP BY Clients.Société, Clients.[Region ID], Produits.[Catégorie Produits],
Produits.Produits, Remise.Daté, Remise.Montant
HAVING (((Year([Daté])) 09));

Ou théoriquement ce qui suit est équivalent (à vérifier) :

SELECT T2.Société, T2.[Region ID], T1.[Catégorie Produits], T1.Produits,
T3.Daté, T3.Montant AS 2008, 0 AS 2009
FROM Produits AS T1 INNER JOIN (Clients AS T2 INNER JOIN Remise AS T3
ON T2.[Clients ID] = T3.Client) ON T1.[Produits ID] = T3.Produits
WHERE Year(T3.[Daté]) 08
UNION
SELECT T2.Société, T2.[Region ID], T1.[Catégorie Produits], T1.Produits,
T3.Daté, 0, T3.Montant
FROM Produits AS T1 INNER JOIN (Clients AS T2 INNER JOIN Remise AS T3
ON T2.[Clients ID] = T3.Client) ON T1.[Produits ID] = T3.Produits
WHERE Year(T3.[Daté]) 09;


FidoDido a écrit :
Merci Michel_D, comment je fait pour ajouter un champ fictif, et es-ce que je
dois ajouter 2 champ fictif sois pour l'année 2008 et un pour 2009 ? et es-ce
que je dois modifier ma requete Union ?

merci

"Michel__D" a écrit :

Re,

Vu que tu laisse le champ date cela sous-entend que tu n'auras pas le
montant de l'année 2008 sur la même ligne que l'année 2009 et dans ce cas
la requête union est une solution tu rajoute un champ fictif correspondant
au champ manquant par exemple pour la portion spécifique à 2008 tu rajoute
le champ 0 AS 2009

SELECT Clients.Société, ... , Remise.Montant AS 2008, 0 AS 2009

et pour la portion dédié à 2009

SELECT Clients.Société, ... , 0 AS 2008, Remise.Montant AS 2009

PS:Comme tu ne réalise pas d'opération sur les enregistrements tu pourrais
modifier les requêtes en supprimant la clause GROUP BY ainsi que la clause
HAVING et mettre une clause WHERE qui renverrait les enregistrements de
l'année concernée.

WHERE Year(Remise.Date) 08

FidoDido a écrit :
Bonjour Michel_D, voici le code que j'ai dans ma requete Union
SELECT Clients.Société, Clients.[Region ID], Produits.[Catégorie Produits],
Produits.Produits, Remise.Daté, Remise.Montant AS 2008
FROM Produits INNER JOIN (Clients INNER JOIN Remise ON Clients.[Clients ID]
= Remise.Client) ON Produits.[Produits ID] = Remise.Produits
GROUP BY Clients.Société, Clients.[Region ID], Produits.[Catégorie
Produits], Produits.Produits, Remise.Daté, Remise.Montant
HAVING (((Year([Daté])) 08))
UNION ALL SELECT Clients.Société, Clients.[Region ID], Produits.[Catégorie
Produits], Produits.Produits, Remise.Daté, Remise.Montant AS 2009
FROM Produits INNER JOIN (Clients INNER JOIN Remise ON Clients.[Clients ID]
= Remise.Client) ON Produits.[Produits ID] = Remise.Produits
GROUP BY Clients.Société, Clients.[Region ID], Produits.[Catégorie
Produits], Produits.Produits, Remise.Daté, Remise.Montant
HAVING (((Year([Daté])) 09));


"Michel__D" a écrit :

Bonjour,

FidoDido a écrit :
Bonjour je suis nouveau ici, et j'ai un problème voici mon problème
j,ai une table qui s'appele "Remise" qui comporte les champs suivant
1- Remise ID
2- Date
3- Clients
4- Catégorie
5- Produits
6- Montant

j'ai créer deux requete qui me sort les ventes pour les années 2008 et 2009,
la je voudrais faire une requête, qui me sortirais un rapport mes champs de 1
a 5 plus le champ 6 je voudrais que l'on vois un champ 2008 et 2009 d'ou je
pourrais faire la différence des ventes entre 2009 et 2008, j'ai essayer de
faire une requete UNION, mais j'ai toujours le même problème, a montant (6)
il me sort juste une clonne alors que je voudrais avoir une colonne 2008 et
ne 2009, comment dois-je faire ? merci de votre aide


Donne le contenu SQL de tes requêtes (SELECT ...)

PS:Une requête union ne semble pas être la solution.



















1 2