|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | |||||
|
Futur Membre du Club
![]() Inscription : juin 2006 Messages : 115 ![]() |
Bonjour à tous,
J'essaie de créer une requête SQL me permettant de diviser un champ par sa sommation. Exemple: Code :
Citation:
Si quelqu'un pourrait m'aider, ce serait grandement apprécié !! Merci *NOTE: Je travail sous Access 2007... *EDIT: Actuellement, mon code ressemble à cela: Code :
|
|||||
|
|
00
|
|
|
#2 |
|
Expert Confirmé
![]() Inscription : mai 2002 Messages : 1 641 ![]() |
Bonsoir,
Vous vous y prenez à l'envers fait. votre sous-requete va être le resultat de l'agrégation (somme des valeur par canaux). Ce résultat va être pris pour faire votre division, en utilisant une jointure. Donc essayez dans l'autre sens car vous n'êtes pas loin de la solution |
|
|
00
|
|
|
#3 | ||
|
Futur Membre du Club
![]() Inscription : juin 2006 Messages : 115 ![]() |
Je crois bien avoir un soucis au niveau de la jointure, car je n'arrive même pas à exécuter ce code:
Code :
|
||
|
|
00
|
|
|
#4 | ||
|
Expert Confirmé
![]() Inscription : mai 2002 Messages : 1 641 ![]() |
Faut voir que là vous faites une jointure inutile qui va dupliquer plein de donnée.
Donc même si vous arrivez aux limites de votre "SGBD" le résultat n'aurait pas été probant. Je pensais plutôt à une solution de ce genre : Code :
|
||
|
|
00
|
|
|
#5 | ||||
|
Membre éclairé
![]() |
Requete:
Code :
Code :
|
||||
|
|
00
|
|
|
#6 | ||
|
Futur Membre du Club
![]() Inscription : juin 2006 Messages : 115 ![]() |
Bonjour,
après ma dernière réunion, le but a quelque peu changé mais le tout reste dans la même lignée... En fait, celui-ci veut obtenir le ratio de canal PAR ANNÉE... Exemple, canal 1: 90%, canal 2: 10% pour l'année 1, canal 1: 60%, canal 2: 40% pour l'année 2 etc... Ainsi, je dois obtenir la somme de valeurs de tous les canaux de l'année divisée par la somme de total d'un seul canal pour cette même année. Comme le diviseur que vous m'aviez proposé représente le nombre divisé, j'ai tenté la requête suivante: Code :
|
||
|
|
00
|
|
|
#7 |
|
Expert Confirmé
![]() Inscription : mai 2002 Messages : 1 641 ![]() |
Bonjour,
avez-vous compris le principe d'agrégation en SQL ? Tenez : http://sqlpro.developpez.com/cours/sqlaz/ensembles/ Avec ceci et la requête de Boussafi (à modifier) je penses que vous devriez arriver à vos fin sans trop de souci. Commencez par la sous-requête et réfléchissez aux jointures necessaires .. |
|
|
00
|
|
|
#8 | ||
|
Futur Membre du Club
![]() Inscription : juin 2006 Messages : 115 ![]() |
Bonjour,
Je suis au regret de devoir vous décevoir, car je ne comprend pas d'où provient l'erreur... L'agrégation me semble correcte, je groupe par année et par canaux. Ma sous-requête (celle incluse dans le join) me retourne les bons résultats, tout ce que je fais dans ma requête originale est d'effectuer une somme des résultats de celle-ci. Si je retire mon groupage par Année et Canaux, je reçois une erreur comme quoi ces expressions manquent à la fonction d'agrégat. De plus, si j'essaie de diviser mes deux nombres (malgré que la somme des totaux ne soit pas bonne), je reçois une constante erronée... Voici mon dernier code: Code :
|
||
|
|
00
|
|
|
#9 | ||||
|
Membre Expert
![]() Inscription : août 2008 Messages : 1 271 ![]() |
Citation:
Tu n'as pas accès aux alias puisque tu es au même niveau. Il faut le remplacer par les vrai sum : Code :
[Edit] Citation:
|
||||
|
|
00
|
|
|
#10 | |||||
|
Futur Membre du Club
![]() Inscription : juin 2006 Messages : 115 ![]() |
Citation:
Pour ce que j'ai à obtenir, je vais refaire un petit tableau car je trouve que ceux-ci sont beaucoup plus exhaustif: Code :
|
|||||
|
|
00
|
|
|
#11 |
|
Membre Expert
![]() Inscription : août 2008 Messages : 1 271 ![]() |
Regarde mon edit plus haut :
Tu es sûr que ce n'est pas l'inverse ? |
|
|
00
|
|
|
#12 | ||||||||
|
Expert Confirmé
![]() Inscription : mai 2002 Messages : 1 641 ![]() |
Code :
Et le group by est incohérent par rapport à ce que vous demandez (j'en déduis que ma 1ere proposition ne devait pas marcher au mieux !) => Code :
donc au final je ferai ça, qui doit coller avec votre demande..sinon reformulez votre demande Code :
edit : ceci a déjà été remonté par skuatamad, désolé Sinon dans votre requête proposée il y a un problème dans le select : Code :
En effet SommeDeValeur & SommeDeTotal ne sont définis qu'au résultat de votre requête et ne peuvent donc pas être réutilisés dans le même select ! (d'où votre erreur) il faudrait pour cela refaire une sous-requête afin de faire le calcul que vous souhaitez |
||||||||
|
|
10
|
|
|
#13 | ||||||
|
Membre éclairé
![]() |
remarque pour Norin, il manque les feedback des reponses de ton besoin
calcule de somme de valeur par année Code :
deviser chaque valeur d'une année donnée par la somme des valeurs de la meme année. Code :
affichage du resulat: Code :
ton feedkack j'attends |
||||||
|
|
00
|
|
|
#14 | ||
|
Futur Membre du Club
![]() Inscription : juin 2006 Messages : 115 ![]() |
Bonjour,
Désolé pour le délai des feedbacks, je ne peux travailler sur cette requête que lorsque l'accès à la base de données est disponible. Boussafi, j'ai essayé votre requête et celle-ci me retourne 46k résultats plutôt que 128. Pour cette requête: Code :
J'ai mis en pièce jointe une portion visible du résultat de la requête (resultat.JPG), le détail de la table T_EXCEL_Demande (table.JPG) ainsi que le résultat des totaux de valeurs (totaux.JPG). Si l'on prend l'image contenant les totaux de valeurs, je désire obtenir, pour l'année 0 et le canal 1 par exemple, 4415442/(4415442 + 4880766 + 277128 + 600131 + 340191 + 2440883 + 1556296 + 5144137) donc, 22.46% séparés ainsi: année, canal (comme dans le fichier En espérant être un peu plus clair sur mes besoins :S Un très grand merci à tous ! |
||
|
|
00
|
|
|
#15 | ||
![]() ![]() |
J'ai un peu survolé la discussion mais, si je comprends bien, tu veux le pourcentage de chaque canal par année ?
Il ne faut pas inclure le canal dans le groupement de la sous-requête : Code :
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
||
|
10
|
|
|
#16 | |||||
|
Futur Membre du Club
![]() Inscription : juin 2006 Messages : 115 ![]() |
Citation:
EDIT: OHMIGOD! Code :
PS: Si quelqu'un peut m'expliquer, je suis preneur... Depuis 2 jours je fais surtout des essais à l'aveuglette et ça a finalement fonctionné
|
|||||
|
|
00
|
|
|
#17 |
![]() ![]() |
Tout simplement : la sous-requête calcule la somme de tous les canaux par année et la requête principale utilise la sous-requête comme diviseur pour avoir la proportion par année et par canal.
EDIT : Effectivement, je n'avais pas vu qu'il ne fallait pas sommer le total par année !
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
|
00
|
Copyright © 2000-2012 - www.developpez.com