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 :

critere de selection pr faire un UPDATE sur 1 table


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Inscrit en
    Janvier 2006
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 4
    Par défaut [Résolu] critere de selection pr faire un UPDATE sur 1 table
    bonjour

    sur une base ORACLE 8i, j'ai la table suivante

    CREATE TABLE TMP_TSC (
    CODSOC NUMBER,
    ACHVTE VARCHAR2 (1),
    SIGTIE VARCHAR2 (12),
    CODPRO VARCHAR2 (16),
    CODREG VARCHAR2 (3),
    CODETB VARCHAR2 (3),
    CODDEV VARCHAR2 (3),
    CODBAR VARCHAR2 (3),
    CODVAR VARCHAR2 (2),
    DATDEB VARCHAR2 (8 ),
    TARCOL VARCHAR2 (1),
    PRXTAR NUMBER,
    PRXREV NUMBER,
    MARGE NUMBER,
    RGLARR VARCHAR2 (3),
    CODUNI VARCHAR2 (3),
    DATFIN VARCHAR2 (8 ),
    INDINT VARCHAR2 (1),
    DATMOD VARCHAR2 (8 ),
    UTIMOD VARCHAR2 (8 ))
    TABLESPACE DATGNX1
    PCTFREE 10
    PCTUSED 40
    INITRANS 1
    MAXTRANS 255
    STORAGE (
    INITIAL 193249280
    NEXT 24055808
    PCTINCREASE 10
    MINEXTENTS 1
    MAXEXTENTS 120
    FREELISTS 1 FREELIST GROUPS 1 )
    NOCACHE;

    dans laquelle se trouve des enregistrements avec CODPRO identique, DATDEB different et PRXTAR different.

    la requete SELECT * from TMP_TSC retourne
    CODSO CCODBAR CODPRO DATDEB PRXTAR
    5610 VB3 100102 20050103 4
    5610 VB3 100102 20050305 4,6
    5610 VB3 100102 20050703 4,2
    5610 VB3 110001 20040102 12,1
    5610 VB3 110001 20051112 11
    5610 VB3 110002 20050505 14,1
    5610 VB3 110002 20050701 15,0

    Je voudrais modifier DATDEB=20060107 pour les enregistrements dont
    CODSOC=5610
    CODBAR=VB3
    CODPRO identique et MAX(DATDEB) - date la plus recente -

    (En fait l'enregistrement le plus recent pour chaque ligne comportant un meme CODPRO).

    soit dans mon cas obtenir le resultat suivant
    CODSOC CODBAR CODPRO DATDEB PRXTAR
    5610 VB3 100102 20050103 4
    5610 VB3 100102 20050305 4,6
    5610 VB3 100102 20060107 4,2 <--
    5610 VB3 110001 20040102 12,1
    5610 VB3 110001 20060107 11 <--
    5610 VB3 110002 20050505 14,1
    5610 VB3 110002 20060107 15,0 <--

    la requete:
    SELECT * from (SELECT CODPRO,MAX(DATDEB) FROM TMP_TSC where CODSOC=5610 and codbar='VB3' group by CODPRO)
    retourne les enregistrements que je souhaite modifier ... mais je n'arrive pas à la convertir en update ''

    merci de votre aide. ''

  2. #2
    Membre Expert
    Avatar de zekey
    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 036
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    UPDATE  CODPRO
          SET  DATDEB='20060107'
     WHERE  rowid in (
    SELECT rowid
       from (SELECT CODPRO,MAX(DATDEB) 
                  FROM TMP_TSC 
                 where CODSOC=5610 
                    and codbar='VB3' 
             group by CODPRO) 
    )

  3. #3
    Futur Membre du Club
    Inscrit en
    Janvier 2006
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 4
    Par défaut
    j'obtiens le message suivant:

    ORA-01446:sélect de ROWID imposs.sur une vue avec fonctions DISTINCT, GROUP BY, etc.

  4. #4
    Membre Expert
    Avatar de zekey
    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 036
    Par défaut
    Oui désolé j'ai pas fait attention à ton select c'etait pour te montrer comment faire.
    C'est quoi TMP_TSC ?
    Refais ton select de base uniquement basé sur la table

  5. #5
    Futur Membre du Club
    Inscrit en
    Janvier 2006
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 4
    Par défaut
    TMP_TSC est une table

  6. #6
    Membre Expert
    Avatar de zekey
    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 036
    Par défaut
    Bon laisse tomber j'ai dis une grosse connerie (je me suis pas relu dsl)
    Essayes avec ca:
    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
     
     
    UPDATE  CODPRO
          SET  DATDEB='20060107'
     WHERE  rowid in (
    SELECT rowid
       FROM TMP_TSC
     WHERE (CODPRO, DATDEB) in (
       SELECT CODPRO,MAX(DATDEB)
                  FROM TMP_TSC
                 where CODSOC=5610
                    and codbar='VB3'
             group by CODPRO
     )
    )
    La partie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
       SELECT CODPRO,MAX(DATDEB)
                  FROM TMP_TSC
                 where CODSOC=5610
                    and codbar='VB3'
             group by CODPRO
    récupère les rows

    la partie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT rowid
       FROM TMP_TSC
     WHERE (CODPRO, DATDEB) in (
    recupere les rowid a updater

  7. #7
    Futur Membre du Club
    Inscrit en
    Janvier 2006
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 4
    Par défaut
    la requete fonctionne ... me reste plus qu'a verifier le bon fonctionnement. En tout cas merci

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 17/10/2010, 11h10
  2. Faire un UPDATE sur tous les champs ?
    Par pasc06 dans le forum Langage
    Réponses: 8
    Dernier message: 03/12/2008, 10h28
  3. [MS SQL]faire un UPDATE sur plusieurs tables en meme temps
    Par touille dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 18/07/2007, 09h45
  4. [VB6] Comment faire un update sur des textbox qui sont créés
    Par bb62 dans le forum VB 6 et antérieur
    Réponses: 27
    Dernier message: 16/02/2006, 14h52
  5. [Debutant] faire un update sur tout une table
    Par Karibou dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 27/07/2005, 14h44

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