Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : comment résoudre cette requete ? [ SQL Server, MSDE, SQL Express / Débutant(s) ] (sikove)

dimanche 25 mai 2008 à 12:41:08 | comment résoudre cette requete ?

sikove

salut tout le monde,

je suis vraiment coincé avec cette requete :

- afficher le nom, salaire, departement et le salaire moyen du departement, pour tout les employés qui ont un salaire moyen>= sal moyen de leurs departements

ce que j'ai essayé de faire :

select avg(sal)
from emp as e
group by job
having avg(sal)>=all(select avg(sal)
                            from emp as r
                            group by depn)
and e.depn=(select depn
                   from emp as r
                   where e.depn=r.depn)

mais ça donne des erreurs, et en plus impossible d'ajouter le nom des employés dans la premiere selection ...

une idée svp ?

merci


dimanche 25 mai 2008 à 18:54:07 | Re : comment résoudre cette requete ?

yann_lo_san

Salut,

il ne faut pas imbriquer les group by !
Il faut passer par une sous-requete de référence ,
Voici le test en Transact-SQL (sql-server)  :

-- Exemple de table avec quelques données

declare  @employe table(nom varchar(35), dept varchar(10), salaire money)
insert into  @employe values('nom1', '13', 1000)
insert into  @employe values('nom2', '13', 1500)
insert into  @employe values('nom3', '27', 2000)
insert into  @employe values('nom4', '10', 1200)
insert into  @employe values('nom5', '75', 900)
insert into  @employe values('nom6', '75', 2500)

-- Requete avec une reference à une sous-requete (appelée ref)

select 
    t1.nom as  'NOM',
    t1.salaire as  'SALAIRE',
    ref.dept as  'DEPT',
    ref.avgSalaire as  'SALAIRE MOYEN DU DEPT'
from
    @employe t1,
    (select  t2.dept,
                avg(t2.salaire) as 'avgSalaire'
    from  @employe t2
    group by  t2.dept) as  ref
where
    t1.dept = ref.dept
    and t1.salaire >= ref.avgSalaire
order by t1.dept

-- Le résultat est :

NOM   SALAIRE    DEPT   SALAIRE MOYEN DU DEPT
-----------------------------------------------------------------
nom4     1200.0000   10       1200.0000
nom2     1500.0000   13       1250.0000
nom3     2000.0000   27       2000.0000
nom6     2500.0000   75       1700.0000

 


dimanche 25 mai 2008 à 22:06:59 | Re : comment résoudre cette requete ?

sikove

ah ok je savais pas qu'on pouvait faire ce truc ^^

j'ai d'autres requetes auquel je n'ai pas trouvé la réponse :

- obliger la majuscule, et doit contenir au moins 2 caratéres  (nom char)
- la premiere caractere s'elle est renseigné, doit etre comprios entre a et z (titre char)
- sexe s'il est renseigné, ne doit accepter que les valeurs m et f  (sexe char)

tu pourrais m'aider stp ?

merci




lundi 26 mai 2008 à 20:35:08 | Re : comment résoudre cette requete ?

yann_lo_san

Rebonjour,

Ben va falloir commencer à bosser un peu non ?

Bon voilà pour tes problèmes :

-- la fonction upper pour les majuscules, la fonction len pour la taille d'une chaine :
-- et un pattern like pour avoir la première lettre entre a et z

selectupper(nom), titre from @employe
wherelen(nom) >= 2
 and titre like'[a-z]%'

-- Concernant la contrainte sur le sexe
-- voilà la solution facile et plutot bète car elle rejette tous les champs qui n'ont pas les caracteres m ou f

and sexein('m', 'f')

-- voilà une solution plutot technique :
--Création d' une règle de base de donnée liée à la colonne voulue.


USE  master

CREATE  RULE
 rule_sexe
AS
@valeursin('m', 'f') or @valeur  is  null


EXEC  sp_bindrule  'rule_sexe' ,  'employe.sexe'


-- A chaque INSERT dans la colonne sexe, la contrainte s'active


lundi 26 mai 2008 à 22:52:41 | Re : comment résoudre cette requete ?

sikove

merci, y'a des trucs que je savais pas ^^

enfaite dans la question 1 c'etait en realité une constrainte à faire : il faut obliger que le champ soit majuscule, j'ai essayé ça

constraint test check( (upper(champ)=champ))

mais cela n'a rien donné.... tu sais comment faire stp ?

merci encore



mardi 27 mai 2008 à 13:36:18 | Re : comment résoudre cette requete ?

yann_lo_san

Salut,

Je peux t'aider même si cela est assez facile à déduire :

Les chaine non unicode (varchar) sont des suites de nombres (ASCII),
le a est different du A dans la suite ascii.

On en déduit donc ceci :

create table bidule
(
   c1 varchar(35)check(ascii(c1)=ascii(upper(c1)))
);




Cette discussion est classé dans : moyen, requete, salaire, sal, depn


Répondre à ce message

Sujets en rapport avec ce message

aide requete [ par kamikaz666 ] Bonjour,Je voudrais avoir la réponse de la requête suivante:"les 3 meilleurs salaires de la table employés"j'ai essayé la requête suivante mais ça ne Probleme requete avec LIKE [ par Bigbangss ] Bonjour,Voila je n'arrive pas à exprimer ma requete.Je souhaiterai afficher tout les éléments d'un enregistrement présents dans une table où une des c Requete de classement avec plusieurs tables [ par slider04 ] Bonjour, j'ai deux tables, une table client et une table temps. je souhaiterais en ressortir le classement de temps selon le niveau et le sexe pour le base de donnée géolocalisation [ par pascb423 ] Bonjour, j'ai une base de donnée qui contient les adresses ip d'après les pays. mon problème c'est que la requete que je fait me donne un résultat fau requete MySQL [ par xactise ] Bonjour et d'avance merci a ceux qui lisent mon post.j'ai un petit souci avec une requete SQL.j'explique ce que je souhaite faire : admetons qu'on est jointure triple [ par petitnounoursjoyeux ] Bonjour tout le monde, je galère depuis un bon moment, j'ai été voir divers forums et tuto, mais pas moyen de faire cette requete de #&#$!#% en gros : requete [ par MANURELAIS ] Salut à tous,Voilà j'ai besoin de vous car je n'arrive pas a faire:Une bd 2 tables (la base n'est pas de moi) Produit ( N°, NOM,) et Categorie(N°categ besoin d'aide pour une requete sql [ par elfifie ] J'ai une table Facture qui contient les champs ID_Facture et Montant.Une autre table Achat qui contient les champs Nom et ID_Facture.Sachant que chaqu appeler un état avec 2 parametres [ par elfifie ] J'arrive bien à ouvrir un état en lui envoyant 1 parametre en faisant :DoCmd.OpenReport stDocName, acPreview, , requeteoù requete = "[Champ] = 'MonCri [curseur] insérer 3 premiers meilleurs salaires [ par sikove ] 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 d


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,624 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.