Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server
MS SQL-Server Forum Microsoft SQL-Server. Avant de poster -> FAQ SQL-Server, Tutoriels SQL-Server
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 30/05/2011, 23h22   #1
Futur Membre du Club
 
Inscription : septembre 2009
Messages : 39
Détails du profil
Informations forums :
Inscription : septembre 2009
Messages : 39
Points : 18
Points : 18
Par défaut UPDATE selon un Count

Bonsoir à tous ,

Je viens vers vous car je bloque sur un UPDATE.

Voici mon select qui est fonctionnel :

Code :
1
2
3
4
SELECT PersonNr , COUNT(*) AS Nombre
FROM X36
GROUP BY PersonNr
HAVING COUNT(*) > 1
Celui-ci me renvoie les "PersonNr" qu'il me faut pour la requete suivante .
Ensuite j'utilise la requete UPDATE suivante :

Code :
1
2
3
UPDATE x36 SET PersonNr = NULL
FROM x36
WHERE PersonNr = (SELECT PersonNr FROM x36 GROUP BY PersonNr HAVING COUNT(*) > 1)
Et il me renvoie l'erreur suivante :

Code :
1
2
3
Msg*512, Niveau*16, État*1, Ligne*1
La sous-requête a retourné plusieurs valeurs. Cela n'est pas autorisé quand la sous-requête suit =, !=, <, <= , >, >= ou quand elle est utilisée en tant qu'expression.
L'instruction a été arrêtée.
Merci par avance pour vos réponses car je bloque

Bonne soirée
Devilstuff est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/05/2011, 00h11   #2
Expert Confirmé
 
Avatar de 7gyY9w1ZY6ySRgPeaefZ
 
Homme
dba
Inscription : juillet 2007
Messages : 2 520
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Canada

Informations professionnelles :
Activité : dba

Informations forums :
Inscription : juillet 2007
Messages : 2 520
Points : 3 967
Points : 3 967
Code :
1
2
3
4
5
6
7
8
9
10
UPDATE T1
FROM x36 T1
SET PersonNr = NULL
INNER JOIN (
	SELECT PersonNr 
	FROM X36
	GROUP BY PersonNr
	HAVING COUNT(*) > 1
) AS T2
ON T1.PersonNr = T2.PersonNr
Moins propre, ça aurait été :
Code :
1
2
3
UPDATE x36 SET PersonNr = NULL
FROM x36
WHERE PersonNr IN (SELECT PersonNr FROM x36 GROUP BY PersonNr HAVING COUNT(*) > 1)
__________________
les règles du forum - mode d'emploi du forum
Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs.
(Rappel : "ça ne marche pas" n'est pas un message d'erreur)
JE NE RÉPONDS PAS aux questions techniques par message privé.
Écrire en français sur un forum est une marque minimale de respect.
7gyY9w1ZY6ySRgPeaefZ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/05/2011, 08h06   #3
Modérateur

 
Avatar de elsuket
 
Homme Nicolas Souquet
Administrateur de base de données
Inscription : janvier 2005
Messages : 4 669
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Souquet
Âge : 30
Localisation : Thaïlande

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : janvier 2005
Messages : 4 669
Points : 8 729
Points : 8 729
Bonjour,

Petite erreur de syntaxe dans la requête : SET est avant FROM :

Code :
1
2
3
4
5
6
7
8
9
10
UPDATE T1
SET PersonNr = NULL
FROM x36 T1
INNER JOIN (
	SELECT PersonNr 
	FROM X36
	GROUP BY PersonNr
	HAVING COUNT(*) > 1
) AS T2
ON T1.PersonNr = T2.PersonNr
Mais on peut aussi écrire, dès SQL Server 2005 :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
;WITH
	CTE AS
	(
		SELECT	PersonNr 
		FROM	dbo.X36
		GROUP	BY PersonNr
		HAVING	COUNT(*) > 1
	)
UPDATE		x36
SET		PersonNr = NULL
FROM		x36 AS X
INNER JOIN	CTE AS C ON X.PersonNr = C.PersonNr
@++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes.
Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012
elsuket est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/05/2011, 23h28   #4
Futur Membre du Club
 
Inscription : septembre 2009
Messages : 39
Détails du profil
Informations forums :
Inscription : septembre 2009
Messages : 39
Points : 18
Points : 18
Bonsoir les developez

J'ai testé la 1er solution ce jour et elle fonctionne sur SQL Server 2000.

Merci à vous

Comme d'habitude ce forum est une référence !!
Devilstuff est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h30.


 
 
 
 
Partenaires

Hébergement Web