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 :

Update champ avec le meme champ de la meme table


Sujet :

Langage SQL

  1. #1
    Membre habitué Avatar de Baquardie
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juillet 2003
    Messages
    267
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Alimentation

    Informations forums :
    Inscription : Juillet 2003
    Messages : 267
    Points : 144
    Points
    144
    Par défaut Update champ avec le meme champ de la meme table
    Bonjour les zamis

    Depuis ce matin que je tourne en rond

    Je dois faire la mise à jour d'un champ à partir de ce même champ dans la même table mais avec des clés de recherche différentes.

    Voici ma requete jusqu'a date :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    update budgetfin
    set bc_cs = f.bc_cs
    from budgetfin f
    where noclientdevin = '3064' and nomarque = 'FRU' and noformat = 'P6X2LT' and nogroupe = 'THE' and type = 'VENTES' and annee = 2004 
     
    and f.noclientdevin = '3064' and f.nomarque = 'CEX' and f.noformat = 'G12X1LT' and f.nogroupe = 'JIP' and f.type = 'VENTES' and f.annee = 2004
     
    and semaine = f.semaine
    et voici ce que j'ai comme résultat :

    Est-ce que quelqu'un pourrait m'éclairer sur la manière de faire un update dans une même table pour un même champ?

    Merci beaucoup
    Rien n'est impossible à celui qui n'a pas à le faire
    DBA. Je travaille avec SQL-9, SQL-10

  2. #2
    Membre expert
    Avatar de Barbibulle
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    2 048
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 2 048
    Points : 3 342
    Points
    3 342
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Update MaTable T1 set T1.MaColonne1 = (Select T2.Macolonne1 from MaTable T2 where T2.MaColonne2=xxx and T2.Macolonne3=YYYY ...)
    where T1.MaColonne2=xxx and T1.Macolonne3=YYYY ...
    Pour que ca fonctionne il faut que le sous select (Select T2.Macolonne1 from MaTable T2 where T2.MaColonne2=xxx and T2.Macolonne3=YYYY ...) ne retrourne qu'une seule valeur.

    Comme vous n'expliquez pas completement ce qui doit être mis à jours (cette question permet de définir la chause where de votre update)
    ni par quoi on met à jour la valeur (définition du sous select)
    on ne peux pas vous aider plus...
    je pense que votre requete devrait resembler à ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    update budgetfin B
    set B.bc_cs = (select f.bc_cs 
    from budgetfin f 
    where f.noclientdevin = B.noclientdevin and f.nomarque = 'CEX' and f.noformat = 'G12X1LT' and f.nogroupe = 'JIP' and f.type = B.type and f.annee = B.annee and f.semaine = B.semaine)
     
    where f.noclientdevin = '3064' and f.nomarque = 'FRU' and f.noformat = 'P6X2LT' and f.nogroupe = 'THE' and f.type = 'VENTES' and f.annee = 2004
    Qui consisterait à updater toutes les données bc_cs de la table budgetfin dont le noclientdevin='3064' et nomarque = 'FRU' et noformat='P6X2LT' et nogroup='THE' et type ='VENTES' et année=2004
    par la valeur trouvé dans la même table même colonne mais qui correspond au même noclientdevin et nomarque = 'CEX' et noformat = 'G12X1LT' et nogroupe = 'JIP' et même type et même annee et même semaine.

  3. #3
    Membre habitué Avatar de Baquardie
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juillet 2003
    Messages
    267
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Alimentation

    Informations forums :
    Inscription : Juillet 2003
    Messages : 267
    Points : 144
    Points
    144
    Par défaut
    Citation Envoyé par Barbibulle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    update budgetfin B
    set B.bc_cs = (select f.bc_cs 
    from budgetfin f 
    where f.noclientdevin = B.noclientdevin and f.nomarque = 'CEX' and f.noformat = 'G12X1LT' and f.nogroupe = 'JIP' and f.type = B.type and f.annee = B.annee and f.semaine = B.semaine)
     
    where f.noclientdevin = '3064' and f.nomarque = 'FRU' and f.noformat = 'P6X2LT' and f.nogroupe = 'THE' and f.type = 'VENTES' and f.annee = 2004
    Bonjour,

    Merci de votre réponse

    Je pensais que ma requête en soit expliquait ce que je voulais faire. Nous devons transferer les valeurs de la colonne bc_cs (caisses) d'un marque-format-groupe à un autre.

    J'ai essayé votre exemple mais je recois ceci comme erreur :

    Server: Msg 170, Level 15, State 1, Line 1
    Line 1: Incorrect syntax near 'B'.
    Server: Msg 156, Level 15, State 1, Line 7
    Incorrect syntax near the keyword 'where'.
    De plus, j'ai lu PARTOUT qu'on ne pouvait pas utiliser d'alias pour la table d'une clause UPDATE...

    :
    Rien n'est impossible à celui qui n'a pas à le faire
    DBA. Je travaille avec SQL-9, SQL-10

  4. #4
    Membre expert
    Avatar de Barbibulle
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    2 048
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 2 048
    Points : 3 342
    Points
    3 342
    Par défaut
    ah ben essayez dans B. je ne sais pas ce que vous avez comme SGBD. Sur interbase on peux utiliser un alias de table dans un update.

  5. #5
    Membre habitué Avatar de Baquardie
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juillet 2003
    Messages
    267
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Alimentation

    Informations forums :
    Inscription : Juillet 2003
    Messages : 267
    Points : 144
    Points
    144
    Par défaut
    SQL Server

    Sans l'alias je recois ce ci comme erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Server: Msg 107, Level 16, State 2, Line 1
    The column prefix 'f' does not match with a table name or alias name used in the query.
    Server: Msg 107, Level 16, State 1, Line 1
    The column prefix 'f' does not match with a table name or alias name used in the query.
    Server: Msg 107, Level 16, State 1, Line 1
    The column prefix 'f' does not match with a table name or alias name used in the query.
    Server: Msg 107, Level 16, State 1, Line 1
    The column prefix 'f' does not match with a table name or alias name used in the query.
    Server: Msg 107, Level 16, State 1, Line 1
    The column prefix 'f' does not match with a table name or alias name used in the query.
    Server: Msg 107, Level 16, State 1, Line 1
    The column prefix 'f' does not match with a table name or alias name used in the query.
    Rien n'est impossible à celui qui n'a pas à le faire
    DBA. Je travaille avec SQL-9, SQL-10

  6. #6
    Membre habitué Avatar de Baquardie
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juillet 2003
    Messages
    267
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Alimentation

    Informations forums :
    Inscription : Juillet 2003
    Messages : 267
    Points : 144
    Points
    144
    Par défaut
    J'ai corrigé l'erreur précédente par ceci


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    update budgetfin
    set bc_cs = (select f.bc_cs 
    from budgetfin f 
    where f.noclientdevin = noclientdevin and f.nomarque = 'CEX' and f.noformat = 'G12X1LT' 
    and f.nogroupe = 'JIP' and f.type = type and f.annee = annee and f.semaine = semaine) 
     
    where noclientdevin = '3064' and nomarque = 'FRU' and noformat = 'P6X2LT' 
    and nogroupe = 'THE' and type = 'VENTES' and annee = 2004
    Mais je recois encore un erreur...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Server: Msg 512, Level 16, State 1, Line 1
    Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.
    The statement has been terminated.
    : : :
    Rien n'est impossible à celui qui n'a pas à le faire
    DBA. Je travaille avec SQL-9, SQL-10

  7. #7
    Membre habitué Avatar de Baquardie
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juillet 2003
    Messages
    267
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Alimentation

    Informations forums :
    Inscription : Juillet 2003
    Messages : 267
    Points : 144
    Points
    144
    Par défaut
    Bon bon bon j'ai trouvé une solution ENFIN misère

    Voici ce que j'ai fait finalement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    update budgetfin
    set bc_cs = (select f.bc_cs 
    from budgetfin f 
    where f.noclientdevin = '3064' and f.nomarque = 'CEX' and f.noformat = 'G12X1LT' 
    and f.nogroupe = 'JIP' and f.type = 'VENTES' and f.annee = 2004 and f.semaine = budgetfin.semaine ) 
    where noclientdevin = '3064' and nomarque = 'FRU' and noformat = 'P6X2LT' 
    and nogroupe = 'THE' and type = 'VENTES' and annee = 2004
    Je voudrais dire un gros à Barbibulle qui m'a débloqué Tu as été le ptit coup de pouce dont j'avais besoin!

    Rien n'est impossible à celui qui n'a pas à le faire
    DBA. Je travaille avec SQL-9, SQL-10

  8. #8
    Membre expert
    Avatar de Barbibulle
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    2 048
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 2 048
    Points : 3 342
    Points
    3 342
    Par défaut
    Citation Envoyé par Baquardie
    Mais je recois encore un erreur...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Server: Msg 512, Level 16, State 1, Line 1
    Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.
    The statement has been terminated.
    Ce message veux dire que le sous select revoie plus d'une valeur.
    a mon avis il considère les noms des colonnes non préfixées comme si c'était la colonne de la table f.
    Donc il faut bien préfixer (mais pas avec un alias) comme vous avez pu le trouver dans votre solution.


    Mais pour éviter de répéter la valeur du noclientdevin dans le sous select ainsi que le type, année faites comme vous avez fait pour semaine :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    update budgetfin
    set bc_cs = (select f.bc_cs 
    from budgetfin f 
    where f.noclientdevin = budgetfin.noclientdevin and f.nomarque = 'CEX' and f.noformat = 'G12X1LT' 
    and f.nogroupe = 'JIP' and f.type = budgetfin.type and f.annee = budgetfin.annee and f.semaine = budgetfin.semaine) 
     
    where noclientdevin = '3064' and nomarque = 'FRU' and noformat = 'P6X2LT' 
    and nogroupe = 'THE' and type = 'VENTES' and annee = 2004

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

Discussions similaires

  1. update champs avec les champs de la meme colonne ?
    Par enstein8 dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 13/08/2011, 21h01
  2. UPDATE d'un tuple avec condition sur le meme champ
    Par zwan.bourg dans le forum Requêtes
    Réponses: 4
    Dernier message: 10/09/2009, 12h32
  3. UPDATE de champ avec intitulé du champ inconnu
    Par php_de_travers dans le forum Requêtes
    Réponses: 3
    Dernier message: 03/04/2009, 10h25
  4. Chargement avec Loader de champs avec RC
    Par Hobbi1 dans le forum SQL*Loader
    Réponses: 5
    Dernier message: 04/06/2008, 19h51
  5. Réponses: 7
    Dernier message: 14/12/2006, 14h18

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