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

10 réponses

1 2
Avatar
Michel__D
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.
Avatar
FidoDido
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.



Avatar
Michel__D
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.





Avatar
FidoDido
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.
>>



Avatar
Michel__D
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.









Avatar
FidoDido
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.
>>>>



Avatar
Michel__D
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.













Avatar
FidoDido
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.
>>>>>>



Avatar
FidoDido
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.
> >>>>>>
>


Avatar
FidoDido
Bonjour Michel_D, j'ai entrée une nouvelle remise, je vois la nouvelle remise
dans la table, mais dans la requete elle ne cumule pas la nouvelle entrée,
sauf que si j'entre une nouvelle entrée avec un nouveau produits pas de
trouble, là dans la requete il ajoute la nouvelle remise. aurais-tu une idée
de ou celà pourrais venir ?
merci de ton aide

"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


1 2