Précédent   Forum du club des développeurs et IT Pro > Bases de données > MS SQL-Server > Développement
Développement Forum d'entraide sur le Transact-SQL, le CLR, les procédures stockées, les triggers, les requêtes SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 21/12/2012, 15h05   #1
Oberown
Membre confirmé
 
Inscription : juillet 2004
Messages : 783
Détails du profil
Informations forums :
Inscription : juillet 2004
Messages : 783
Points : 230
Points : 230
Par défaut Suppression des lignes qui n'ont pas la plus grande valeur

Bonjour,

J'ai un tableau avec deux colonnes.
Je souhaite supprimer les lignes qui n'ont pas la valeur la plus grande sur ID2, mais pour chaque Id1. En gros pour chaque Id1, je garde la ligne ayant le plus grand Id2
C'est du sql server
Comment faire ?

Merci beaucoup

Code SQL :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 
CREATE TABLE [dbo].[MaTable](
	[Id1] [int] NOT NULL,
	[Id2] [int] NOT NULL,
 CONSTRAINT [PK_MaTable] PRIMARY KEY CLUSTERED 
(
	[Id1] ASC,
	[Id2] ASC
) ON [PRIMARY]
) 
 
 
GO
 
INSERT INTO MaTable(Id1, Id2) VALUES(1,1);
INSERT INTO MaTable(Id1, Id2) VALUES(1,2);
INSERT INTO MaTable(Id1, Id2) VALUES(1,3);
INSERT INTO MaTable(Id1, Id2) VALUES(2,2);
INSERT INTO MaTable(Id1, Id2) VALUES(2,3);
INSERT INTO MaTable(Id1, Id2) VALUES(2,4);
INSERT INTO MaTable(Id1, Id2) VALUES(3,1);

Résultat:
1,3
2,4
3,1
Oberown est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2012, 15h50   #2
tatayo
Expert Confirmé
 
Homme
Responsable de service informatique
Inscription : janvier 2009
Messages : 1 539
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 39
Localisation : France

Informations professionnelles :
Activité : Responsable de service informatique
Secteur : Boutique - Magasin

Informations forums :
Inscription : janvier 2009
Messages : 1 539
Points : 3 074
Points : 3 074
Bonjour,
Supprimer les lignes qui n'ont pas la plus grande valeur, revient à supprimer les lignes pour lesquelles il en existe d'autre avec une plus grande valeur.

Donc en SQL:
Code SQL :
1
2
3
 
DELETE FROM matable t1
WHERE exist(SELECT * FROM matable t2 WHERE t2.id1 = t1.id1 AND t2.id2 > t1.id2)

Tatayo.
tatayo est actuellement connecté   Envoyer un message privé Réponse avec citation 10
Vieux 21/12/2012, 15h57   #3
Oberown
Membre confirmé
 
Inscription : juillet 2004
Messages : 783
Détails du profil
Informations forums :
Inscription : juillet 2004
Messages : 783
Points : 230
Points : 230
J'ai ce message d'erreur: Incorrect syntax near 't1'.
Oberown est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2012, 16h22   #4
al1_24
Modérateur
 
Avatar de al1_24
 
Homme Alain
Ingénieur d'études décisionnel
Inscription : mai 2002
Messages : 4 868
Détails du profil
Informations personnelles :
Nom : Homme Alain
Âge : 52
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études décisionnel
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 4 868
Points : 11 718
Points : 11 718
Et comme ça ?
Code :
1
2
3
4
5
6
7
8
9
DELETE
FROM    matable AS t1
WHERE   EXISTS 
        (   SELECT  NULL 
            FROM    matable AS t2
            WHERE   t2.id1 = t1.id1 
                AND t2.id2 > t1.id2
        )
;
__________________
Modérateur Langage SQL
Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
N'oubliez pas le bouton et pensez aux balises
[code]
Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
al1_24 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2012, 16h23   #5
Oberown
Membre confirmé
 
Inscription : juillet 2004
Messages : 783
Détails du profil
Informations forums :
Inscription : juillet 2004
Messages : 783
Points : 230
Points : 230
Pas non toujours pas:

Incorrect syntax near the keyword 'AS'.

Mais avec un SELECT ça fonctionne

Code SQL :
1
2
3
4
5
6
7
8
9
SELECT *
FROM    matable AS t1
WHERE   EXISTS 
        (   SELECT  NULL 
            FROM    matable AS t2
            WHERE   t2.id1 = t1.id1 
                AND t2.id2 > t1.id2
        )
;
Oberown est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2012, 16h40   #6
Oberown
Membre confirmé
 
Inscription : juillet 2004
Messages : 783
Détails du profil
Informations forums :
Inscription : juillet 2004
Messages : 783
Points : 230
Points : 230
Voilà j'ai réussi (il fallait mettre un second FROM)

Code sql :
1
2
3
4
5
6
7
8
9
10
 
DELETE
FROM    matable
FROM  matable AS t1
WHERE   EXISTS 
        (   SELECT  NULL 
            FROM    matable AS t2
            WHERE   t2.id1 = t1.id1 
                AND t2.id2 > t1.id2
        )
Oberown est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 11h26.


 
 
 
 
Partenaires

Hébergement Web