OVH Cloud OVH Cloud

update et sous requete

1 réponse
Avatar
Thierry
bonjour,
je cherche a mettre à jour une table de la facon suivante:

table origine:
client date num
10 01/10/2005 0
11 01/10/2005 0
10 01/10/2005 0
12 02/10/2005 0
table final
10 01/10/2005 1
11 01/10/2005 1
10 01/10/2005 0
12 02/10/2005 1

J'ai essayé ca mais ca marche pas
UPDATE table1
SET num = 1
WHERE (SELECT COUNT(DISTINCT client)
FROM Table1
GROUP BY [date])

Si quelqu'un a une idée

Merci d'avance


Thierry

1 réponse

Avatar
Jean-Nicolas BERGER
Si je comprends bien la chose, il y a plusieurs enregistrements parfaitement
identiques dans la table source, et le but du jeu est de mettre 1 sur le
premier. C'est ça?
Alors je dirais d'abord que la notion de premier enregistrement rencontré ne
veut, dans l'absolu, rien dire sous SQL Server. En effet, SQL Server peut
décider de se baser sur tel ou tel index en fonction des statistiques qu'il
tient à jour, et que la table origine peut donc, lors d'un select avec telle
ou telle clause, se présenter dans "n'importe quel" ordre. Comment alors
savoir quel est l'enregistrement sur lequel num doit être mis à 1?
S'il y a un champ discriminant, merci donc de le préciser dans ta requête.
Si le but est simplement, lorsqu'il y a plusieurs enregistrement identiques,
d'en mettre un à '1' sans du tout maîtriser lequel (si on cherche à modifier
des enregistrements sans maîtriser la chose à ce point, c'est vraiment qu'il
y a un truc qui cloche), alors je te conseille juste de faire un curseur
(voir l'instruction DECLARE CURSOR), en INSENSITIVE, et à chaque
enregistrement de tester si on n'a pas déjà flagué un enregistrement
identique à 1 (par exemple avec un "IF NOT EXISTS ... WHERE num=1 AND
...." ).
Mais je le répète, ton besoin, tel que je l'ai compris, est vraiment tordu
dans le contexte d'un SGBDR.
JN.

"Thierry" a écrit dans le message de
news:
bonjour,
je cherche a mettre à jour une table de la facon suivante:

table origine:
client date num
10 01/10/2005 0
11 01/10/2005 0
10 01/10/2005 0
12 02/10/2005 0
table final
10 01/10/2005 1
11 01/10/2005 1
10 01/10/2005 0
12 02/10/2005 1

J'ai essayé ca mais ca marche pas
UPDATE table1
SET num = 1
WHERE (SELECT COUNT(DISTINCT client)
FROM Table1
GROUP BY [date])

Si quelqu'un a une idée

Merci d'avance


Thierry