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
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
En principe une requête suppression suffit. Non!
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
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à....)Envoyé par DMboup
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.
Exemple
La difficulté ici c'est de retrouver l'avant dernière ligne. J'utilises des requêtes imbriquées pour cela.
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)));
Il ya peut être d'autres méthodes!!
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 ?
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!
oui, j'ai adapté à mon cas :
mais quand j'exécute, j'ai un message d'erreur ::
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));
"l'opération doit utiliser une requêt qui peut être mise à jour"
Tu dois mettre à jour une autre colonne différente de celle qui te permet de savoir quel ligne modidifer
Après le SET, il te faut mettre à jour la colonne qui doit être à nullEnvoyé par kikidrome
bon, je ne suis pas sûre d'avoir pigé..
j'ai essayéet j'ai le même message d'erreur
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));
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)
avecj'ai maintenant un message différent :
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);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
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);
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
NUMFONCstr est utilisé comme champ à mettre à jour et comme champ de recherche du dernier enregistrement. c'est cela qui pose le problème.UPDATE LaTable AS T SET NUMFONCstr = NULL
WHERE NUMFONCstr= (SELECT TOP 1 NUMFONCstr FROM LaTable WHERE ID<T.ID ORDER BY ID DESC);
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.
Et alors ça ne pose aucun problème, d'autre part c'est l'id trié en ordre inverse qui donne le dernier enregistrement.NUMFONCstr est utilisé comme champ à mettre à jour et comme champ de recherche du dernier enregistrement.
Bien sûr que non. N'importe quel champ peut être fixé à nul pour peut qu'il y soit autoriséDe plus si le champ NUMFONCstr est un numérique la valeur null sera refusée.
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.Envoyé par Tofalu
Oui tant est qu'on y met bien null et pas ""Envoyé par Tofalu
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 :
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager