IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MS SQL Server Discussion :

Combinaison des valeurs d'une colonne pour trouver une somme


Sujet :

MS SQL Server

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2018
    Messages
    150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2018
    Messages : 150
    Points : 63
    Points
    63
    Par défaut Combinaison des valeurs d'une colonne pour trouver une somme
    Bonjour,
    je souhaite trouver une requête qui irait chercher les valeurs exactes d'une colonne pour constituer une somme.
    Voici un exemple :

    Nom : 2021-08-06_05h29_21.png
Affichages : 376
Taille : 4,8 Ko

    La requete ramène toutes les valeurs qui une fois additionnées donnent 56.52

    Merci de votre aide

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 088
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 088
    Points : 38 393
    Points
    38 393
    Billets dans le blog
    9
    Par défaut
    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.

  3. #3
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 191
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 191
    Points : 28 070
    Points
    28 070
    Par défaut
    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

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 814
    Points
    17 814
    Par défaut
    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 :
    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
    Petite mise en garde toutefois, ne lancez pas ça sur trop de données, ça tabasse assez fort.

Discussions similaires

  1. [XL-2013] créer une boucle pour créer des onglets en fonction des valeurs d'une colonne
    Par BOUJ08 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 11/02/2016, 12h46
  2. Réponses: 2
    Dernier message: 17/03/2011, 22h45
  3. Maximum des valeurs d'une colonne
    Par cjacquel dans le forum Access
    Réponses: 1
    Dernier message: 19/01/2007, 18h25
  4. Réponses: 2
    Dernier message: 11/07/2006, 13h02
  5. quote dans des valeurs d'une colonne SET
    Par Jean Fi dans le forum Requêtes
    Réponses: 6
    Dernier message: 30/03/2006, 21h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo