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.
A voir également:
- Problème de Requête Sql : je n'y arrive pas.
- Logiciel sql - Télécharger - Bases de données
- Quelle requête écrire pour demander au moteur de recherche de présenter de préférence les pages web traitant de tennis mais pas de tennis de table ✓ - Forum Java
- Sql lister les tables ✓ - Forum Programmation
- Erreur lors de l'envoi de la requête facebook - Forum Facebook
- Requête bloquée par le pare-feu applicatif claranet webfence ✓ - Forum Réseaux sociaux
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 :
J'ai bien saisi ?
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 | Colonne2pour arriver à :
1 | X
2 | X
3 | Y
4 | Y
5 | X
6 | X
Colonne1 | Colonne2
1 | X
1 | X
3 | Y
4 | Y
1 | X
1 | X
J'ai bien saisi ?
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 ^^) :
Tu dis si c'est ok !
A+
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+
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 ?
J'y réfléchis un peu et je te poste une requête exemple !
Juste une question, ce traitement c'est pour un besoin ponctuel ou quelque chose de plus régulier ?
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..