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

Requêtes et SQL. Discussion :

requête pour "effacer" certaines valeurs ?


Sujet :

Requêtes et SQL.

  1. #1
    Membre éclairé
    Avatar de kikidrome
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France, Drôme (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 861
    Points : 685
    Points
    685
    Par défaut requête pour "effacer" certaines valeurs ?
    bonjour

    j'ai une table comme ceci :

    et j'aimerais faire une requête pour effacer la valeur de la dernière colonne lorsqu'elle est identique à la valeur de la ligne précédente :


    est-ce possible ?

    Merci

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Localisation : Sénégal

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 229
    Points : 1 579
    Points
    1 579
    Par défaut
    En principe une requête suppression suffit. Non!

  3. #3
    Membre éclairé
    Avatar de kikidrome
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France, Drôme (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 861
    Points : 685
    Points
    685
    Par défaut
    je ne veux pas supprimer les ligne, je veux mettre des espaces dans la denière colonne lorsque la valeur est identique à la valeur de la ligne précédente

  4. #4
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Localisation : Sénégal

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 229
    Points : 1 579
    Points
    1 579
    Par défaut
    Ce sera donc une requête mise à jour.

  5. #5
    Membre éclairé
    Avatar de kikidrome
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France, Drôme (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 861
    Points : 685
    Points
    685
    Par défaut
    Citation Envoyé par DMboup
    Ce sera donc une requête mise à jour.
    un peu d'aide pour la requête ? (je fais des rapports crystal report, je sais faire qq requêtes simples... et ej n'ai pas d'idée là....)

  6. #6
    Membre régulier
    Inscrit en
    Février 2006
    Messages
    219
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 219
    Points : 108
    Points
    108
    Par défaut
    Je pense que tu seras dans l'obligation de passer par une procédure VBA qui parcoure ta table et met à jour les champs si nécessaire.

  7. #7
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Localisation : Sénégal

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 229
    Points : 1 579
    Points
    1 579
    Par défaut
    Exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    UPDATE Table1 SET Table1.id = ""
    WHERE NumId=(Select Max(NumId) From Table1 Where NumId not In (Select Max(NumId) From Table1)));
    La difficulté ici c'est de retrouver l'avant dernière ligne. J'utilises des requêtes imbriquées pour cela.

    Il ya peut être d'autres méthodes!!

  8. #8
    Membre éclairé
    Avatar de kikidrome
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France, Drôme (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 861
    Points : 685
    Points
    685
    Par défaut
    Merci. j'ai essayé mais çà ne marche pas, je crois que je ne peux pas mettre à jour la table.. est-ce que je peux créer une autre table à partir de la première ?

  9. #9
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Localisation : Sénégal

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 229
    Points : 1 579
    Points
    1 579
    Par défaut
    Qu'est ce que tu as testé? J'espères que tu n'as pas copier/coller tout simplement!

    As tu changé la table et les champs par tes véritables valeurs?
    Si oui montres nous ce que tu as fais!

  10. #10
    Membre éclairé
    Avatar de kikidrome
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France, Drôme (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 861
    Points : 685
    Points
    685
    Par défaut
    oui, j'ai adapté à mon cas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    UPDATE GRAPH_IPR SET GRAPH_IPR.NUMFONC_str = ""
    WHERE NUMFONC_str=(Select Max(NUMFONC_str) From GRAPH_IPR Where NUMFONC_str  not In (Select Max(NUMFONC_str) From GRAPH_IPR));
    mais quand j'exécute, j'ai un message d'erreur ::
    "l'opération doit utiliser une requêt qui peut être mise à jour"


  11. #11
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Localisation : Sénégal

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 229
    Points : 1 579
    Points
    1 579
    Par défaut
    Tu dois mettre à jour une autre colonne différente de celle qui te permet de savoir quel ligne modidifer

    Citation Envoyé par kikidrome
    UPDATE GRAPH_IPR SET GRAPH_IPR.NUMFONC_str = ""
    WHERE NUMFONC_str=(Select Max(NUMFONC_str) From GRAPH_IPR Where NUMFONC_str not In (Select Max(NUMFONC_str) From GRAPH_IPR
    Après le SET, il te faut mettre à jour la colonne qui doit être à null

  12. #12
    Membre éclairé
    Avatar de kikidrome
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France, Drôme (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 861
    Points : 685
    Points
    685
    Par défaut
    bon, je ne suis pas sûre d'avoir pigé..
    j'ai essayé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    UPDATE GRAPH_IPR SET GRAPH_IPR.NUMFONC_str = ""
    WHERE NUMFONC_str=(Select Max(id) From GRAPH_IPR Where id  not In (Select Max(id) From GRAPH_IPR));
    et j'ai le même message d'erreur

  13. #13
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Pour ma part j'ai ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    UPDATE LATABLE t
    SET numFoncStr=NULL
    WHERE numfoncstr= (SELECT LAST(NumFoncStr) FROM Latable WHERE ID<T.ID ORDER BY ID)

  14. #14
    Membre éclairé
    Avatar de kikidrome
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France, Drôme (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 861
    Points : 685
    Points
    685
    Par défaut
    avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    UPDATE GRAPH_IPR AS T SET NUMFONC_str = NULL
    WHERE NUMFONC_str= (SELECT LAST(NUMFONC_str) FROM GRAPH_IPR WHERE ID<T.ID ORDER BY ID);
    j'ai maintenant un message différent :
    vous avez essayé d'exécuter une requête ne comprenant pas l'expression spécifié 'ID' comme une partie de la fonction d'agrégat

  15. #15
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut


    J'ai rajouté le order by sans retester

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    UPDATE LaTable AS T SET NUMFONCstr = NULL
    WHERE NUMFONCstr= (SELECT TOP 1 NUMFONCstr FROM LaTable WHERE ID<T.ID ORDER BY ID DESC);

  16. #16
    Membre éclairé
    Avatar de kikidrome
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France, Drôme (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 861
    Points : 685
    Points
    685
    Par défaut
    merci mais j'avais déjà mis un "order by". c'est plutôt un "group by"qui manque quand on a ce message, non ?

    est-ce que je peux plutôt construire une nouvelle table qui serait une copie de la première en mettant juste la valeur de la dernière colonne à " " lorsque elle est égale à la valeur de la ligne précédente ?

    car j'ai l'impression que le update ne peux pas fonctionner dans mon cas

  17. #17
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Localisation : Sénégal

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 229
    Points : 1 579
    Points
    1 579
    Par défaut
    UPDATE LaTable AS T SET NUMFONCstr = NULL
    WHERE NUMFONCstr= (SELECT TOP 1 NUMFONCstr FROM LaTable WHERE ID<T.ID ORDER BY ID DESC);
    NUMFONCstr est utilisé comme champ à mettre à jour et comme champ de recherche du dernier enregistrement. c'est cela qui pose le problème.

    J'avais utilisé un champ Id (supposé Numérique) pour retrouver le dernier enregistrement et je m'étais à jour un champ différent.

    De plus si le champ NUMFONCstr est un numérique la valeur null sera refusée.

  18. #18
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    NUMFONCstr est utilisé comme champ à mettre à jour et comme champ de recherche du dernier enregistrement.
    Et alors ça ne pose aucun problème, d'autre part c'est l'id trié en ordre inverse qui donne le dernier enregistrement.

    De plus si le champ NUMFONCstr est un numérique la valeur null sera refusée.
    Bien sûr que non. N'importe quel champ peut être fixé à nul pour peut qu'il y soit autorisé

  19. #19
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Localisation : Sénégal

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 229
    Points : 1 579
    Points
    1 579
    Par défaut
    Citation Envoyé par Tofalu
    ..., d'autre part c'est l'id trié en ordre inverse qui donne le dernier enregistrement.
    Pas du tout. Son champ peux avoir des valeurs nulles dont une peux être le dernier enregistrement et qui ne sera pas le premier de ton trie.

    Citation Envoyé par Tofalu
    Bien sûr que non. N'importe quel champ peut être fixé à nul pour peut qu'il y soit autorisé
    Oui tant est qu'on y met bien null et pas ""

  20. #20
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    D'aprés son exemple, ce qui caractèréise l'ordre des enregistrements semble bien être ID non ?

    Je ne vois pas du tout où est le problème

    et j'aimerais faire une requête pour effacer la valeur de la dernière colonne lorsqu'elle est identique à la valeur de la ligne précédente :

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

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