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 :

Update sur Select imbriqué partageant une clef commune


Sujet :

MS SQL Server

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 7
    Points : 7
    Points
    7
    Par défaut Update sur Select imbriqué partageant une clef commune
    Bonjour,

    A mon avis la solution me mort le nez mais bon. Voici la table de départ :

    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
    +--------+---------+---------+---------+
    |ID      | Client  | Dataset | Valeur  |
    +--------+---------+---------+---------+
    | 1      | Jacques | 1       | 10      |
    +--------+---------+---------+---------+
    | 2      | Jacques | 1       | 20      |
    +--------+---------+---------+---------+
    | 3      | Jacques | 5       | 0       |
    +--------+---------+---------+---------+
    | 4      | Didier  | 1       | 5       |
    +--------+---------+---------+---------+
    | 5      | Didier  | 1       | 7       |
    +--------+---------+---------+---------+
    | 6      | Didier  | 5       | 0       |
    +--------+---------+---------+---------+
    Je cherche à faire la somme des dataset=1 pour chaque client pour ensuite placer le résultat dans le dataset=5

    Cela donne à l'arrivée :

    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
    +--------+---------+---------+---------+
    |ID      | Client  | Dataset | Valeur  |
    +--------+---------+---------+---------+
    | 1      | Jacques | 1       | 10      |
    +--------+---------+---------+---------+
    | 2      | Jacques | 1       | 20      |
    +--------+---------+---------+---------+
    | 3      | Jacques | 5       | 30      |
    +--------+---------+---------+---------+
    | 4      | Didier  | 1       | 5       |
    +--------+---------+---------+---------+
    | 5      | Didier  | 1       | 7       |
    +--------+---------+---------+---------+
    | 6      | Didier  | 5       | 12      |
    +--------+---------+---------+---------+
    Je me mélange les pinceaux. J'ai l'intuition que ma syntaxe sera de type UPDATE FROM SELECT avec un JOIN pour la clef commune (le client) mais je n'arrive pas à exprimer la chose correctement après de (très) nombreuses tentatives. Mon niveau SQL étant assez sommaire

    Quant à faire un premier SELECT pour ensuite faire autant d'UPDATE que de lignes retournées, cela me laisse le temps de me torréfier un café (soupirs). L'idéal serait de résumer cela en une requête je présume.

    Pouvez-vous m'aider ?

    Au plaisir de vous lire, bien à tous,

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 848
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 848
    Points : 52 964
    Points
    52 964
    Billets dans le blog
    6
    Par défaut
    Quelque chose comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    UPDATE ???
    SET  Valeur = SUM(T2.Valeur)
    FROM ??? AS T1
         INNER JOIN ??? AS T2
               ON T1.Client = T2.CLient 
    WHERE T1.Dataset = 5 
      AND T2.Dataset <> 5
    GROUP  BY T2.CLient
    Merci de respecter la charte de postage en postant le DDL de votre table ainsi qu'un jeu d'essais sous forme INSERT : http://www.developpez.net/forums/d96...vement-poster/

    a +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 7
    Points : 7
    Points
    7
    Par défaut
    Bonjour,

    Merci beaucoup. C'est exactement ce qu'il me fallait.

    Bien cordialement,

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Delphi6,Access] Requête update avec select imbriqué
    Par magicstar dans le forum Débuter
    Réponses: 3
    Dernier message: 30/03/2009, 19h40
  2. requete update avec select imbriqué
    Par mikees dans le forum SQL
    Réponses: 3
    Dernier message: 09/02/2009, 17h42
  3. Somme sur conditions imbriquée dans une requête
    Par aleximan dans le forum Requêtes et SQL.
    Réponses: 8
    Dernier message: 25/01/2008, 18h05
  4. Requete Update avec Select imbriqué: etrange resultat!
    Par corentone dans le forum Langage SQL
    Réponses: 3
    Dernier message: 13/08/2007, 15h05
  5. Problème d'UPDATE sur un champ d'une table MyISAM
    Par alouette dans le forum Requêtes
    Réponses: 6
    Dernier message: 13/07/2006, 20h17

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