Requête addition de champs sur tables différentes + tri
Résolu
Kiroul
Messages postés
13
Date d'inscription
Statut
Membre
Dernière intervention
-
Kiroul Messages postés 13 Date d'inscription Statut Membre Dernière intervention -
Kiroul Messages postés 13 Date d'inscription Statut Membre Dernière intervention -
A voir également:
- Requête addition de champs sur tables différentes + tri
- Comment faire un tri personnalisé sur excel - Guide
- Addition excel - Guide
- Logiciel tri photo - Guide
- Tables des matières word - Guide
- Word mettre à jour tous les champs - Forum Word
10 réponses
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
Et ceci (pas testé) ?
SELECT Année, sum(SousTotaux) AS SommeDeSalesAmount FROM (SELECT year(DateKey) as Année, sum(SalesAmount) AS SousTotaux from FactOnlineSales group by year(DateKey) union all SELECT year(DateKey), sum(SalesAmount) from FactSales group by year(DateKey)) GROUP BY Année;
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
Pour faire la somme de 2 champs (Chiffre d'affaires) se trouvant dans 2 tables différentes, je propose (ca1 et ca2 sont les noms des deux tables, et ca est le nom du champs contenant le chiffre d'affaire :
Qu'en penses-tu?
select s1.sca+s2.sca from (select sum(ca) as sca from ca1) as s1 , (select sum(ca) as sca from ca2) as s2
Qu'en penses-tu?
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
Pour calculer les chiffre d'affaires totaux (des 2 tables) selon l'année, je propose :
SELECT year(ca1.DT), sum(ca1.ca) AS sca FROM (SELECT ca1.dt, ca1.ca,1 from ca1 union SELECT ca2.dt, ca2.ca,2 from ca2) GROUP BY year(ca1.dt);
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Voici les résultats que j'obtiens (CA1 suivi de CA2), je souhaite faire la somme des 2 totaux de chaque année (2007 : 719M+4 561M)
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
Je pense que la requête devrait être :
Si possible, merci de copier les requêtes comme texte, pas comme image, c'est plus facile à récupérer.
SELECT year(DateKey) as Année, sum(SalesAmount) AS SommeDeSalesAmount FROM (SELECT DateKey, SalesAmount,1 from FactOnlineSales union SELECT DateKey, SalesAmount,2 from FactSales) GROUP BY year(DateKey);
Si possible, merci de copier les requêtes comme texte, pas comme image, c'est plus facile à récupérer.

Essai 1 :
SELECT year(DateKey) as Année, sum(SalesAmount) AS SommeDeSalesAmount
FROM
(SELECT DateKey, SalesAmount,1 from FactOnlineSales
union
SELECT DateKey, SalesAmount,2 from FactSales)
GROUP BY year(DateKey);
Essai 2 :
SELECT year(DateKey) as Année, sum(SalesAmount) AS SommeDeSalesAmount
FROM
(SELECT DateKey, SalesAmount from FactOnlineSales
union
SELECT DateKey, SalesAmount from FactSales)
GROUP BY year(DateKey);
Même si la logique me semble bonne, je pense que le résultat est erroné
Je ne parviens pas à comprendre les résultats de Sommes de Sales Amount.
Cela semble fonctionner ! :)
Merci beaucoup !
Pourriez-vous m'expliquer le fonctionnement de la requête ?
Comment les SELECT de la ligne 7 s'ajoutent à sum(SousTotaux) ?
Comment l'année de la table FactSales et celle de FactOnlineSales se lient ?

Merci beaucoup !
Pourriez-vous m'expliquer le fonctionnement de la requête ?
Comment les SELECT de la ligne 7 s'ajoutent à sum(SousTotaux) ?
Comment l'année de la table FactSales et celle de FactOnlineSales se lient ?

yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
SELECT Année, sum(SousTotaux) AS SommeDeSalesAmount FROM ( SELECT year(DateKey) as Année, sum(SalesAmount) AS SousTotaux from FactOnlineSales group by year(DateKey) union all SELECT year(DateKey) as Année, sum(SalesAmount) AS SousTotaux from FactSales group by year(DateKey) ) GROUP BY Année;
Je pense que tu vas comprendre si tu fais ceci (j'ai ajouté les "AS" (inutiles) dans le select de la ligne 8, et j'ai mis les parenthèses en évidence en lignes 3 et 10, pour que ce soit plus clair) :
- exécute la requete dans les lignes 4 à 6
- puis 8 à 9
- ensuite les lignes 4 à 9
- puis le tout
N'hésite pas à poser d'autres questions, j'essayerai d'y répondre.
Remercions ceux qui ont conçu SQL !
Par contre, je ne comprends pas pourquoi ceci (plus concis mais sans doute moins efficace) ne donne pas les totaux corrects :
Par contre, je ne comprends pas pourquoi ceci (plus concis mais sans doute moins efficace) ne donne pas les totaux corrects :
SELECT year(DateKey) as Année, sum(SalesAmount) AS SommeDeSalesAmount FROM ( SELECT DateKey, SalesAmount from FactOnlineSales union all SELECT DateKey, SalesAmount from FactSales ) GROUP BY year(DateKey);bonne soirée!
Je pense avoir compris pourquoi mes premières suggestions foiraient : c'est parce que le "union" (sans "all") élimine les doublons dans la réponse, et donc que, si tu avais plusieurs enregistrements identiques (même dates et mêmes montants), il n'en gardait qu'un. :-(
Pour répondre à ta question : le "union all" ne tient pas compte des noms retournés par le second select (ligne 6), il tient compte des noms retournés par le premier select (ligne 4), le second select doit avoir le même nombre de champs, et dans le bon ordre.
C'est bien le "union all" qui fait ce boulot de "lien", pas le select de la ligne 1.
Pour répondre à ta question : le "union all" ne tient pas compte des noms retournés par le second select (ligne 6), il tient compte des noms retournés par le premier select (ligne 4), le second select doit avoir le même nombre de champs, et dans le bon ordre.
C'est bien le "union all" qui fait ce boulot de "lien", pas le select de la ligne 1.