IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MS SQL Server Discussion :

UPDATE selon un Count


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 45
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  2. #2
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    UPDATE x36 SET PersonNr = NULL
    FROM x36
    WHERE PersonNr IN (SELECT PersonNr FROM x36 GROUP BY PersonNr HAVING COUNT(*) > 1)

  3. #3
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Par défaut
    Bonjour,

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

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    @++

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 45
    Par défaut
    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 !!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [SQL] Update avec un count sur une colonne de la meme table
    Par debdev dans le forum SAS Base
    Réponses: 5
    Dernier message: 28/01/2014, 16h46
  2. insertion ou update selon le cas
    Par crischprolch dans le forum SQL
    Réponses: 17
    Dernier message: 12/11/2008, 15h29
  3. UPDATE selon un critère sur la même table
    Par CinePhil dans le forum Requêtes
    Réponses: 2
    Dernier message: 25/03/2008, 10h50
  4. Réponses: 8
    Dernier message: 18/01/2008, 15h58
  5. Update, select et count
    Par dbuweb dans le forum Requêtes
    Réponses: 2
    Dernier message: 21/06/2006, 16h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo