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

Langage SQL Discussion :

[MS SQL Server] comment faire des boucles en SQL ?


Sujet :

Langage SQL

  1. #1
    Yorel
    Invité(e)
    Par défaut [MS SQL Server] comment faire des boucles en SQL ?
    Bonjour à tous,

    1ère chose : j'espère avoir posté au bon endroit...

    mon problème :

    j'ai le resultat suivant (provenant déjà d'une requête) :

    num_article num_operation wkcntr
    ----------- -------------- ------
    123456 10 00021
    123456 20 00050
    123456 30 00041
    456789 10 00082
    456789 20 00054
    456789 30 00050
    456789 40 00076
    456789 50 00050
    456789 60 00050

    Mon problème est donc le suivant : à partir de ma liste de numeros d'article, je dois transformer les wkcntr égaux à 00050 en 00036 sauf si il est suivi d'une autre operation avec un wkcntr égal lui aussi à 00050 comme pour l'article 456789 (operation 50 et 60) auquel cas, les deux lignes seront additionné pour n'en faire plus qu'une (--> ex : ligne de l'operation 60 effacé et ajouté à l'operation 50 suivant un autre champ que je n'ai pas mis pour le moment pour ne pas m'embrouiller).
    J'espère être clair... Ce que je veux obtenir dans un premier temps, c'est changer le wkcntr 00050 en 00036 sauf si il est suivi par un autre wkcntr à 00050 !
    Je voudrais obtenir le tableau suivant :

    num_article num_operation wkcntr
    ----------- -------------- ------
    123456 10 00021
    123456 20 00036
    123456 30 00041
    456789 10 00082
    456789 20 00054
    456789 30 00036
    456789 40 00076
    456789 50 00050
    456789 60 00050


    Merci par avance de me mettre sur la piste.

    En fait, il faudrait que j'utilise la fonction update du style :

    UPDATE MaTable SET WKCNTR='00036' WHERE WKCNTR='00050'

    mais ca va tout me changer et je ne veux surtout pas que ça me change les lignes ou il y a 2 ou plus wkcntr contenant la valeur 00050 qui se suivent !!!

    Peut être qu'il faut que j'utilise des boucles mais je ne sais pas comment faire...
    Dernière modification par Yorel ; 31/10/2006 à 16h47.

  2. #2
    Yorel
    Invité(e)
    Par défaut
    A priori, on m'a dit qu'il faut que j'utilise un curseur pour balayer la table !
    Donc je vais voir comment ça peut se goupiller car je connais pas trop les curseurs. Si quelqu'un connait bien leur utilisation, je l'en remercierait beaucoup de pouvoir m'aider par rapport à mon soucis !!!

  3. #3
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 774
    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 774
    Points : 52 746
    Points
    52 746
    Billets dans le blog
    5
    Par défaut
    en utilisant un not exists...

    quelque chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    UPDATE MaTable 
    SET    WKCNTR='00036' 
    WHERE  WKCNTR='00050'
      AND  NOT EXISTS (SELECT 1
                       FROM   MaTable T1
                       WHERE  num_article = T1.num_article
                         AND  wkcntr = T1.wkcntr
                         AND  COUNT(DISTINCT num_operation) > 1)
    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/ * * * * *

Discussions similaires

  1. comment inserer des images en sql server
    Par rddev dans le forum VB.NET
    Réponses: 1
    Dernier message: 25/04/2007, 13h26
  2. Réponses: 3
    Dernier message: 01/12/2006, 20h31
  3. [ADO.NET][SQL SERVER] Comment supprimer des enregistrements?
    Par julien37510 dans le forum Accès aux données
    Réponses: 2
    Dernier message: 01/12/2006, 12h00
  4. Réponses: 17
    Dernier message: 22/09/2006, 17h34
  5. [SQL server] Comment Fusionner des données dans une requête
    Par MoTUmBo dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 27/07/2005, 15h24

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