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 avec sous-requêtes [2005]


Sujet :

MS SQL Server

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2014
    Messages : 3
    Par défaut UPDATE avec sous-requêtes
    Bonjour,

    Je n'arrive pas à adapter la requête select ci-dessous afin d'effectuer un update de la table w_p_rqtbill
    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
     
    Select
      IsNull(Sum(Cast(p_rqtpec.RqtPecElapseDel As float) / 60 * dbo.W_CHTX_Tarif(r_wrkobj.ObjInCde, r_adc.SrvcObjRteInCde, p_rqtpec.RqtPecToDte) * IsNull(dbo.r_wrkobj.ObjQty, 1)), 0) As MO_Cout_Autres,
      IsNull(Sum(Cast(p_rqtpec.RqtPecElapseDel As float) / 60 * IsNull(r_wrkobj.ObjQty, 1)), 0) As MO_Tps_Autres
    From
      r_wrkobj Right Outer Join
      (p_rqtpec Inner Join
      p_rqt On p_rqtpec.RqtInCde = p_rqt.RqtInCde Inner Join
      r_adc On p_rqt.AdcInCde = r_adc.AdcInCde) On dbo.r_wrkobj.WrkInCde =
        p_rqtpec.WrkInCde Inner Join
      w_p_rqtbill On p_rqt.RqtInCde = w_p_rqtbill.RqtInCde
    Where
      p_rqt.RqtDte >= '01/01/2012' And
      p_rqtpec.RqtEndPnt = 1 And
      p_rqt.DstWrkGrpInCde = 32
    Group By
      p_rqt.RqtInCde
    J'ai tenté plusieurs requêtes update sans résultat probant.
    Voici la dernière mouture de ma requête :
    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
    27
    28
     
    UPDATE w_p_rqtbill
    SET w_p_rqtbill.MO_Tps_Autres = (SELECT IsNull(Sum(Cast(p_rqtpec.RqtPecElapseDel As float) / 60 * IsNull(r_wrkobj.ObjQty, 1)), 0)
    			FROM
    			r_wrkobj Right Outer Join
    			(p_rqtpec Inner Join
      			p_rqt On p_rqtpec.RqtInCde = p_rqt.RqtInCde Inner Join
     			r_adc On p_rqt.AdcInCde = r_adc.AdcInCde) On dbo.r_wrkobj.WrkInCde = p_rqtpec.WrkInCde 
    			WHERE
      			p_rqt.RqtInCde = w_p_rqtbill.RqtInCde
    			GROUP BY p_rqt.RqtInCde),
    w_p_rqtbill.MO_Autres = (SELECT IsNull(Sum(Cast(p_rqtpec.RqtPecElapseDel As float) / 60 * dbo.W_CHTX_Tarif(r_wrkobj.ObjInCde, r_adc.SrvcObjRteInCde, p_rqtpec.RqtPecToDte) * IsNull(dbo.r_wrkobj.ObjQty, 1)), 0)
    			FROM
    			r_wrkobj Right Outer Join
      			(p_rqtpec Inner Join
      			p_rqt On p_rqtpec.RqtInCde = p_rqt.RqtInCde Inner Join
      			r_adc On p_rqt.AdcInCde = r_adc.AdcInCde) On dbo.r_wrkobj.WrkInCde = p_rqtpec.WrkInCde
    			WHERE
      			p_rqt.RqtInCde = w_p_rqtbill.RqtInCde
    			GROUP BY p_rqt.RqtInCde)
    FROM
      p_rqtpec Inner Join
      p_rqt On p_rqtpec.RqtInCde = p_rqt.RqtInCde
    WHERE
      p_rqt.RqtInCde = w_p_rqtbill.RqtInCde And
      p_rqt.RqtDte > '01/01/2012' And
      p_rqtpec.RqtEndPnt = 1 And
      p_rqt.DstWrkGrpInCde = 32
    Malheureusement la requête update ne met pas à jour toutes les valeurs retournées par ma requête select et, en plus, quand elle met à jour, le coût et le temps insérés ne correspondent pas aux résultat que j'obtiens dans ma requête select

    Quelqu'un aurait-il une piste pour m'aider à corriger ma requête update ?

    Merci par avance.

  2. #2
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    Bonjour,

    Et avec une syntaxe comme ceci :
    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
     
     
    UPDATE w_p_rqtbill
    SET w_p_rqtbill.MO_Tps_Autres   =   IsNull(Sum(Cast(p_rqtpec.RqtPecElapseDel AS float) / 60 * IsNull(r_wrkobj.ObjQty, 1)), 0)
    ,w_p_rqtbill.MO_Autres =  IsNull(Sum(Cast(p_rqtpec.RqtPecElapseDel AS float) / 60 * dbo.W_CHTX_Tarif(r_wrkobj.ObjInCde, r_adc.SrvcObjRteInCde, p_rqtpec.RqtPecToDte) * IsNull(dbo.r_wrkobj.ObjQty, 1)), 0) AS MO_Cout_Autres,
     
    FROM
      r_wrkobj RIGHT OUTER JOIN
      (p_rqtpec INNER JOIN
      p_rqt ON p_rqtpec.RqtInCde = p_rqt.RqtInCde INNER JOIN
      r_adc ON p_rqt.AdcInCde = r_adc.AdcInCde) ON dbo.r_wrkobj.WrkInCde =
        p_rqtpec.WrkInCde INNER JOIN
      w_p_rqtbill ON p_rqt.RqtInCde = w_p_rqtbill.RqtInCde
    INNER JOIN w_p_rqtbill
    ON p_rqt.RqtInCde = w_p_rqtbill.RqtInCde
    WHERE
      p_rqt.RqtDte >= '01/01/2012' AND
      p_rqtpec.RqtEndPnt = 1 AND
      p_rqt.DstWrkGrpInCde = 32
    GROUP BY
      p_rqt.RqtInCde

  3. #3
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2014
    Messages : 3
    Par défaut
    Bonjour aieeeuuuuu.

    Merci pour ta réponse.
    Cependant, j'obtiens une erreur lors de l'exécution :
    'Syntaxe incorrecte vers le mot clé GROUP'
    C'est pourquoi j'ai placé le group by dans les sous-requêtes.

  4. #4
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    oui, je n'avais pas vu le group byAlors mettez votre requête en sous requête en pseudo table avec jointure pour l'update :

    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
     
    UPDATE w_p_rqtbill
    SET 
        w_p_rqtbill.MO_Tps_Autres   = MO_Tps_Autres
        ,w_p_rqtbill.MO_Autres =  MO_Cout_Autres,
     FROM w_p_rqtbill
    INNER JOIN (
        SELECT p_rqt.RqtInCde,
      IsNull(Sum(Cast(p_rqtpec.RqtPecElapseDel AS float) / 60 * dbo.W_CHTX_Tarif(r_wrkobj.ObjInCde, r_adc.SrvcObjRteInCde, p_rqtpec.RqtPecToDte) * IsNull(dbo.r_wrkobj.ObjQty, 1)), 0) AS MO_Cout_Autres,
      IsNull(Sum(Cast(p_rqtpec.RqtPecElapseDel AS float) / 60 * IsNull(r_wrkobj.ObjQty, 1)), 0) AS MO_Tps_Autres
    FROM
      r_wrkobj RIGHT OUTER JOIN
      (p_rqtpec INNER JOIN
      p_rqt ON p_rqtpec.RqtInCde = p_rqt.RqtInCde INNER JOIN
      r_adc ON p_rqt.AdcInCde = r_adc.AdcInCde) ON dbo.r_wrkobj.WrkInCde =
        p_rqtpec.WrkInCde INNER JOIN
      w_p_rqtbill ON p_rqt.RqtInCde = w_p_rqtbill.RqtInCde
    WHERE
      p_rqt.RqtDte >= '01/01/2012' AND
      p_rqtpec.RqtEndPnt = 1 AND
      p_rqt.DstWrkGrpInCde = 32
    GROUP BY
      p_rqt.RqtInCde) T
    ON T.RqtInCde = w_p_rqtbill.RqtInCde

  5. #5
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2014
    Messages : 3
    Par défaut
    Merci beaucoup aieeeuuuuu.

    La requête que vous m'avez conseillée a fonctionné parfaitement.

    Bonne journée et merci encore.

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

Discussions similaires

  1. Requète UPDATE avec sous-requète dans la même table.
    Par Selenite dans le forum Langage SQL
    Réponses: 6
    Dernier message: 16/03/2009, 15h04
  2. Requete UPDATE avec sous-requète
    Par alaingui dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 27/06/2008, 21h16
  3. UPDATE avec sous requête de sélection avec regroupement
    Par Maxsen dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 09/03/2008, 11h20
  4. [FB2]Update avec sous requête resultat ?
    Par AuBozon dans le forum SQL
    Réponses: 1
    Dernier message: 29/02/2008, 21h04
  5. Requête Update avec Sous-requête
    Par Yohann_x dans le forum Requêtes
    Réponses: 8
    Dernier message: 16/02/2008, 13h19

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