Problème de Requête Sql : je n'y arrive pas.
nicojojo
-
nicojojo -
nicojojo -
Bonjour,
Voilà j'ai une table de ce type :
Colonne 1 | Colonne 2
1 | x
2 | x
12 | x
et je dois affecter la plus petite valeur de la colonne 1 (qui est donc 1) à tous les autres champs de la colonne 1 qui ont un enregistrement x en colonne 2. Je n'arrive pas à trouver la requête UPDATE correspondante. Peut-être auriez vous une idée ?
Je suis sous SQL serveur.
J'ai un début ; UPDATE PERSONNEL SET IDPERSPOSTE=MIN(IDPERSPOSTE) WHERE ... Mais après je sais plus. D'ailleurs le début est pas forcément bon non plus.
Voilà j'ai une table de ce type :
Colonne 1 | Colonne 2
1 | x
2 | x
12 | x
et je dois affecter la plus petite valeur de la colonne 1 (qui est donc 1) à tous les autres champs de la colonne 1 qui ont un enregistrement x en colonne 2. Je n'arrive pas à trouver la requête UPDATE correspondante. Peut-être auriez vous une idée ?
Je suis sous SQL serveur.
J'ai un début ; UPDATE PERSONNEL SET IDPERSPOSTE=MIN(IDPERSPOSTE) WHERE ... Mais après je sais plus. D'ailleurs le début est pas forcément bon non plus.
2 réponses
-
Hello,
Je ne comprends pas bien à tous les autres champs de la colonne 1, une colonne a des champs ?
Est-ce que la demande correspond à cet exemple :
on part de :Colonne1 | Colonne2
pour arriver à :
1 | X
2 | X
3 | Y
4 | Y
5 | X
6 | XColonne1 | Colonne2
1 | X
1 | X
3 | Y
4 | Y
1 | X
1 | X
J'ai bien saisi ?
-
Merci beaucoup Morgothal,
Et bien, oui c'est bien ce que tu as décris pour X...
Mais c'est malheureusement encore plus compliqué, car le problème et que cela doit AUSSI effectuer le même traitement pour Y et pour Z et pour + l'infini !
( C'est à dire que si la valeur minimale de Z est 2 par exemple, et bien chaque champ de la colonne 1 associée à {colonne2->Z} doit être updatée avec la valeur 2 !)
Ourgh, c'est quand même assez complexe non ? -
-
Non c'est ponctuel, pour corriger un bug qui a altéré une base de donnée...
En fait, il faut attribuer les valeurs de la colonne 1 en fonction de l'enregistrement de valeur mini "associé" au champs de la colonne 2. C'est dur à exprimer pour moi.
Tiens, je viens de penser à un truc ...
Peut être faire une recherche des valeurs mini pour chaque enregistrement de la colonne 2 dans un premier temps, puis faire le update à l'aide de ces données..
-
-
Re,
Je ne vois que maintenant ton commentaire, mais oui c'est exactement ce que je fais :-)
Voilà la requête qui te permet d'avoir le minimum pour chaque valeur de la colonne 2 dans une table temporaire ##temptable, j'ai appelé ma table de valeurs d'entrée CSD_TEST(colonne1, colonne2)
(désolé c'est sans indentation ni majuscules, j'ai fait ça sur un coin de table vite fait ^^) :
create table ##temptable (mincol1 int, col2 varchar(1))
insert into ##temptable(col2) select distinct colonne2 from csd_test
DECLARE @var varchar(1)
DECLARE curseur CURSOR FOR SELECT col2 FROM ##temptable
OPEN curseur
FETCH curseur INTO @var
WHILE @@FETCH_STATUS = 0
BEGIN
--------------------------
update ##temptable set mincol1 = (select MIN(colonne1) from csd_test where colonne2 = col2) where col2 = @var
--------------------------
FETCH curseur INTO @var
END
CLOSE curseur
DEALLOCATE curseur
select * from csd_test
select * from ##temptable
drop table ##temptable
Tu dis si c'est ok !
A+