Requête addition de champs sur tables différentes + tri
Résolu/Fermé
Kiroul
Messages postés
13
Date d'inscription
dimanche 20 novembre 2016
Statut
Membre
Dernière intervention
4 décembre 2016
-
20 nov. 2016 à 16:39
Kiroul Messages postés 13 Date d'inscription dimanche 20 novembre 2016 Statut Membre Dernière intervention 4 décembre 2016 - 4 déc. 2016 à 10:22
Kiroul Messages postés 13 Date d'inscription dimanche 20 novembre 2016 Statut Membre Dernière intervention 4 décembre 2016 - 4 déc. 2016 à 10:22
A voir également:
- Requête addition de champs sur tables différentes + tri
- Formule excel addition - Guide
- Tri excel - Guide
- Comment faire une table des matières sur word - Guide
- Logiciel de tri de photos - Guide
10 réponses
yg_be
Messages postés
23405
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
20 décembre 2024
Ambassadeur
1 557
21 nov. 2016 à 13:25
21 nov. 2016 à 13:25
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
23405
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
20 décembre 2024
Ambassadeur
1 557
20 nov. 2016 à 22:32
20 nov. 2016 à 22:32
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
23405
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
20 décembre 2024
Ambassadeur
1 557
Modifié par yg_be le 20/11/2016 à 23:10
Modifié par yg_be le 20/11/2016 à 23:10
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);
Kiroul
Messages postés
13
Date d'inscription
dimanche 20 novembre 2016
Statut
Membre
Dernière intervention
4 décembre 2016
21 nov. 2016 à 09:51
21 nov. 2016 à 09:51
Merci pour votre aide, cependant les résultats sont incorrects.
Je vous envoie les images de ce j'ai réussi à produire.
Je vous envoie les images de ce j'ai réussi à produire.
Kiroul
Messages postés
13
Date d'inscription
dimanche 20 novembre 2016
Statut
Membre
Dernière intervention
4 décembre 2016
21 nov. 2016 à 09:49
21 nov. 2016 à 09:49
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Kiroul
Messages postés
13
Date d'inscription
dimanche 20 novembre 2016
Statut
Membre
Dernière intervention
4 décembre 2016
21 nov. 2016 à 09:57
21 nov. 2016 à 09:57
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)
Kiroul
Messages postés
13
Date d'inscription
dimanche 20 novembre 2016
Statut
Membre
Dernière intervention
4 décembre 2016
21 nov. 2016 à 09:59
21 nov. 2016 à 09:59
yg_be
Messages postés
23405
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
20 décembre 2024
Ambassadeur
1 557
Modifié par yg_be le 21/11/2016 à 11:54
Modifié par yg_be le 21/11/2016 à 11:54
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.
Kiroul
Messages postés
13
Date d'inscription
dimanche 20 novembre 2016
Statut
Membre
Dernière intervention
4 décembre 2016
21 nov. 2016 à 13:18
21 nov. 2016 à 13:18
Je ne parviens toujours pas aux résultats escomptées... :(
Kiroul
Messages postés
13
Date d'inscription
dimanche 20 novembre 2016
Statut
Membre
Dernière intervention
4 décembre 2016
21 nov. 2016 à 13:06
21 nov. 2016 à 13:06
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.
Kiroul
Messages postés
13
Date d'inscription
dimanche 20 novembre 2016
Statut
Membre
Dernière intervention
4 décembre 2016
21 nov. 2016 à 14:34
21 nov. 2016 à 14:34
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
23405
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
20 décembre 2024
Ambassadeur
1 557
Modifié par yg_be le 21/11/2016 à 15:19
Modifié par yg_be le 21/11/2016 à 15:19
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.
Kiroul
Messages postés
13
Date d'inscription
dimanche 20 novembre 2016
Statut
Membre
Dernière intervention
4 décembre 2016
21 nov. 2016 à 18:49
21 nov. 2016 à 18:49
Merci beaucoup, la logique est très claire !
Merci pour ce détail.
Bonne soirée
Merci pour ce détail.
Bonne soirée
yg_be
Messages postés
23405
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
20 décembre 2024
1 557
21 nov. 2016 à 19:05
21 nov. 2016 à 19:05
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!
Kiroul
Messages postés
13
Date d'inscription
dimanche 20 novembre 2016
Statut
Membre
Dernière intervention
4 décembre 2016
>
yg_be
Messages postés
23405
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
20 décembre 2024
22 nov. 2016 à 18:20
22 nov. 2016 à 18:20
Je viens de tester votre dernière requête et celle-ci me donne les mêmes résultats.
Si les champs des 2 tables avait eu des noms différents (CA et SalesAmount/dateKey et date du jour par exemple) comment aurait-il été possible de lier les deux en ligne 1 ?
Si les champs des 2 tables avait eu des noms différents (CA et SalesAmount/dateKey et date du jour par exemple) comment aurait-il été possible de lier les deux en ligne 1 ?
yg_be
Messages postés
23405
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
20 décembre 2024
1 557
22 nov. 2016 à 19:39
22 nov. 2016 à 19:39
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.
Kiroul
Messages postés
13
Date d'inscription
dimanche 20 novembre 2016
Statut
Membre
Dernière intervention
4 décembre 2016
>
yg_be
Messages postés
23405
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
20 décembre 2024
23 nov. 2016 à 11:26
23 nov. 2016 à 11:26
Ce qui explique les montants qui ne correspondaient ni au total de l'une ou de l'autre.
Merci beaucoup pour cette explication !
Merci beaucoup pour cette explication !