[curseur] insérer 3 premiers meilleurs salaires

sikove Messages postés 90 Date d'inscription lundi 17 mars 2008 Statut Membre Dernière intervention 31 mars 2010 - 6 janv. 2009 à 18:36
SQLpro Messages postés 35 Date d'inscription samedi 17 novembre 2007 Statut Membre Dernière intervention 8 février 2012 - 14 janv. 2009 à 21:48
Salut,

voila ça fait un moment que je cherche comment faire cette requete :

" inserer dans une table temporaire les 3 meilleurs salaires d'une table donnée "

la table sur laquelle on travaillle :

create table employe (
id int primary key,
nom varchar(10),
prenom varchar(10),
salaire int )

insert into employe values(2, 'bkllir', 'sihgham', 3050)
insert into employe values(3, 'deir', 'ayoffub', 260)
insert into employe values(4, 'bdir', 'mehdi', 50)
insert into employe values(5, 'maroir', 'hamza', 10000)

j'ai tout essayé mais ça marche pas

voila mon code

declare am cursor for
select id, nom, prenom, salaire from copie_employe order by salaire desc
declare @ct int, @id int, @nom varchar(10), @prenom varchar(10), @salaire int
set @ct=0
open am
fetch am into @id, @nom, @prenom, @salaire
while (@@fetch_status=0 and @ct<3)
begin
insert into sal_employe values(@id, @nom, @prenom, @salaire)
set @ct=@ct+1
fetch am into @id, @nom, @prenom, @salaire
end
close am
deallocate am

pouvez vous m'aider svp ? je suis vraiment coincé la snif snif ...

merci d'avance

4 réponses

sikove Messages postés 90 Date d'inscription lundi 17 mars 2008 Statut Membre Dernière intervention 31 mars 2010
6 janv. 2009 à 18:39
désolé j'ai fait une erreur dans mon premier message, et comme impossible d'éditer  ....

c'est employe et non copie_employe dans le curseur

si seulement je pourrais savoir d'ou vient mon probleme
0
amitermi Messages postés 1 Date d'inscription jeudi 22 septembre 2005 Statut Membre Dernière intervention 7 janvier 2009
7 janv. 2009 à 08:38
As tu essayé

declare @ct int
select @ct=3

insert into sal_employe
select top @ct id, nom, prenom, salaire from employe order by salaire desc
0
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Modérateur Dernière intervention 15 juillet 2011 36
7 janv. 2009 à 10:21
SALUT

Nb c'est syntaxe n'est disponible qu'a partir de SQL SERVER 2005.

Il est possible de la faire avec un chaine de caractere si tu veux que ton 3 soit parametrable

sinon tu peux faire

insert into sal_employe
select top 3  id, nom, prenom, salaire from employe order by salaire desc

Si ton 3 n'est pas parametrable
0
SQLpro Messages postés 35 Date d'inscription samedi 17 novembre 2007 Statut Membre Dernière intervention 8 février 2012 1
14 janv. 2009 à 21:48
SELECT id, nom, prenom, salaire
INTO   #MaTableTemp
FROM   (SELECT id, nom, prenom, salaire,
               RANK() OVER(ORDER BY salaire DESC) AS N
        FROM   employe) AS T
WHERE  N <= 3

-- vérification
SELECT * FROM #MaTableTemp

id          nom        prenom     salaire
----------- ---------- ---------- -----------
5           maroir     hamza      10000
2           bkllir     sihgham    3050
3           deir       ayoffub    260

Frédéric BROUARD - SQLpro - MVP SQL Server
Spécialiste SQL, SGBDR, modéles de données
SQL & SGBDR  http://sqlpro.developpez.com/
Expert SQL Server : http://www.sqlspot.com
audits - optimisation - tuning - formatio
0