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

Développement SQL Server Discussion :

Update avec row_NUMBER


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Femme Profil pro
    Consultante BI
    Inscrit en
    Mars 2011
    Messages
    236
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Consultante BI
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 236
    Par défaut Update avec row_NUMBER
    Bonjour tous le monde ,

    Je veux faire Update sur la première ligne, je m'explique :

    Les entrées:

    J'ai deux tables:
    Table1 (FK_customer , SoldePts) 1--300
    2--250
    Table2(Fk_CUSTOMER, FK_JOUR,FK_MAGASIN,SOLDE) 1--L-m1--0
    1--j--M2--0

    Je veux que le solde de 2 eme table sera mis à jour à partir de la première table mais il devra être inséré seulement dans la première ligne

    Les sorties:
    1--L--m1--300
    1--j--m2--0


    j'ai fais cette requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    UPDATE [MG_DWH].[dbo].[VNT_FACT_DM_VENTES_CUS_JR]
      SET PTS_FORCE = A.SOLDE
      FROM (
      SELECT 
          E.SOLDE_FORCE AS SOLDE
          ,E.[FK_CUSTOMER]
          ,(SELECT T.RANG from (SELECT ROW_NUMBER () OVER (partition by B.fk_customer order by  B.fk_magasin,B.fk_jour desc ) as rang FROM [MG_DWH].[dbo].[VNT_FACT_DM_VENTES_CUS_JR] B WHERE B.fk_customer=E.FK_CUSTOMER )T where rang=1) AS RANG
    FROM [MG_APP].[dbo].[FID.SOLDE_FORCE] E) A 
       INNER JOIN  [MG_DWH].[dbo].[VNT_FACT_DM_VENTES_CUS_JR] AA ON AA.fk_customer=A.FK_CUSTOMER
    Mais ça fonctionne pas correctement : Avec cette requête l'update se fais sur toutes les lignes

    Merci d'avance.

  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
    22 009
    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 : 22 009
    Billets dans le blog
    6
    Par défaut
    Il n'existe pas d'ordre dans les SGBDR qui manipulent des ensembles de données.
    Dès lors la notion de 1ere ligne n'a aucun sens.
    A lire : http://sqlpro.developpez.com/cours/sqlaz/erreurs/#L5

    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
    Membre éclairé
    Femme Profil pro
    Consultante BI
    Inscrit en
    Mars 2011
    Messages
    236
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Consultante BI
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 236
    Par défaut
    Merci pour le lien , mais je suis toujours bloqué
    mon but est d’insérer le solde de points dans la première transaction

  4. #4
    Membre éclairé
    Femme Profil pro
    Consultante BI
    Inscrit en
    Mars 2011
    Messages
    236
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Consultante BI
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 236
    Par défaut
    Encore merci , j'ai trouvé une solution

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    WITH cte as (SELECT *, row_number() OVER (partition by fk_customer order by  fk_jour,fk_magasin asc ) as rang from [MG_DWH].[dbo].[VNT_FACT_DM_VENTES_CUS_JR])
     
    update cte 
     
     
      SET PTS_FORCE = A.SOLDE
      FROM (
      SELECT 
          E.SOLDE_FORCE AS SOLDE
          ,E.[FK_CUSTOMER]
     
      FROM [MG_APP].[dbo].[FID.SOLDE_FORCE] E INNER JOIN  [MG_DWH].[dbo].[VNT_FACT_DM_VENTES_CUS_JR] AA ON AA.fk_customer=e.FK_CUSTOMER) A 
         where  rang=1  AND cte.FK_CUSTOMER=A.FK_CUSTOMER
    Avec cette requête ça fonctionne nickel

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

Discussions similaires

  1. UPDATE avec JOIN ?
    Par zakuli dans le forum Débuter
    Réponses: 3
    Dernier message: 25/07/2007, 15h53
  2. UPDATE avec des variables Delphi ...
    Par Kokito dans le forum Bases de données
    Réponses: 3
    Dernier message: 08/03/2004, 23h35
  3. Requete d'update avec concatenation !!
    Par chris92 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 25/02/2004, 13h05
  4. [version] Requete Update avec différentes versions de mySQL
    Par regbegpower dans le forum Requêtes
    Réponses: 2
    Dernier message: 26/01/2004, 18h19
  5. Pb Update avec chaine de caractere
    Par JuJu° dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 28/05/2003, 16h58

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