Bonjour,
je souhaite trouver une requête qui irait chercher les valeurs exactes d'une colonne pour constituer une somme.
Voici un exemple :
La requete ramène toutes les valeurs qui une fois additionnées donnent 56.52
Merci de votre aide
Bonjour,
je souhaite trouver une requête qui irait chercher les valeurs exactes d'une colonne pour constituer une somme.
Voici un exemple :
La requete ramène toutes les valeurs qui une fois additionnées donnent 56.52
Merci de votre aide
Bonjour,
Si la somme doit correspondre aux trois lignes en bleu, alors elle est égale à 56,02 et non pas 56,52.
Quoi qu'il en soit, pour faire cette somme, il faut des critères permettant de ne retenir que les lignes qui vous intéressent.
Ensuite, il faudra utiliser à minima la fonction SUM() combinée ou pas avec GROUP BY().
Vous trouverez un tutoriel ICI qui en explique l'utilisation.
Je peux me tromper, mais je ne pense pas que ce soit possible avec seulement SQLServer et une requête.
Le moteur de requêtes ne sait traiter les données que ligne à ligne, séquentiellement, avec possibilité, parfois, d’agréger des lignes successives sur certains critères.
Pour que ce soit possible il faudrait que tu identifie d'abords le moyen d'isoler les lignes spécifiques qui vont répondre à ton problème, faire en sorte via des filtres, tris, etc qu'elles se retrouve ensemble dans le résultat pour pouvoir ensuite les agréger et en faire la somme.
Ce que tu cherche à faire, va plutôt être le travail d'outils supplémentaires d'analyse de données tel que PowerBI, SQLServer Analysis Services, etc ... ou même, il me semble Excel dans une certaine mesure.
--- Sevyc64 ---
Parce que le partage est notre force, la connaissance sera notre victoire
J'ai modifié le total recherché à 56.20 car comme indiqué par escatefigue vos données ne produisent pas de totaux à 56.52.
J'ai également rajouté la valeur exacte pour solution complémentaire dans le jeu de données :
Petite mise en garde toutefois, ne lancez pas ça sur trop de données, ça tabasse assez fort.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 create table MaTable ( valeur decimal(5,2) ); insert into MaTable values (18.38), (18.64), (19), (19.18), (19.34), (19.72), (21.42), (21.54), (22.16), (22.30), (56.20); declare @total decimal(5,2) = 56.20; with cte_recurs (valeur, valeur_totale, chemin) as ( select valeur, valeur, cast(valeur as varchar(max)) from MaTable union all select mta.valeur , cast(cte.valeur_totale + mta.valeur as decimal(5,2)) , cte.chemin + ' + ' + cast(mta.valeur as varchar(max)) from cte_recurs as cte join MaTable as mta on mta.valeur > cte.valeur where cast(cte.valeur_totale + mta.valeur as decimal(5,2)) <= @total ) select valeur_totale, chemin from cte_recurs where valeur_totale = @total; valeur_totale chemin ------------- --------------------- 56.20 56.20 56.20 18.38 + 18.64 + 19.18
Email : http://scr.im/waldar
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager