2010-06-27 4 views
0

Ce fut ma première question:Je suis en train de corriger ce code d'erreur dans T-SQL qui indique que j'ai une colonne invalide

“What would be the correct syntax and join (if any) of a subquery that would return all of the employees first and last name from the employee’s table, and return their department name from the department table, but only those employees who more than the average salary for their department? Thanks for your answers”

Après avoir utilisé l'exemple de Mitch blé (et en prenant son admondishment bien mérité), j'ai ajouté une colonne à ma table DEPARTMENT dans ma base de données et mis en œuvre ce code:

ALTER TABLE DEPARTMENTS 
ADD Salary money 
GO 
select First_Name, Last_Name, department_Name 
from Employees e join 
    (select Department_Name,AVG(Salary) AS averageSalary 
    from DEPARTMENTS d 
    join Employees e ON e.Department_Id=d.Department_Id 
    group by Department_Name) ds 
on ds.averageSalary=e.Employee_Id 
where e.salary>ds.AverageSalary 

Cependant, j'ai toujours eu cette erreur:

Msg 207, Level 16, State 1, Line 8 
Invalid column name 'salary'. 

Pourquoi SALARY continue d'être un nom de colonne non valide?

+2

Vous avez posé plusieurs questions au cours des derniers jours, et la plupart d'entre elles ont dû être reformatées par quelqu'un d'autre. Veuillez utiliser le bouton 'Code Sample' pour le code, et lisez le [Markdown Editing Help] (http://stackoverflow.com/editing-help) –

+2

Comment fonctionne l'association ds.averageSalary = e.Employee_ID? Ne comparez-vous pas un salaire à une pièce d'identité ici? – LittleBobbyTables

Répondre

2

Vous avez peut-être activé un classement sensible à la casse, ce qui affecte la sensibilité à la casse des noms de colonnes. Notez que votre colonne ajoutée est "Salaire", mais votre requête fait référence à "salaire". Corrigez le cas et cela devrait aller. Corrigez le cas. Pour plus d'informations, voir this related question.

(Note également LittleBobbyTables (grande entaille, btw) commentaire au sujet de votre requête - il y a une étrange clause de jointure là-bas!)

0

Êtes-vous sûr que vous avez une colonne de salaire dans le tableau des employés? (e.salaire) La colonne Salaire que vous avez ajoutée est sur la table Department (d.Salary) pour stocker le salaire moyen du département, je suppose.

Aussi, comme l'a déclaré Paul Dixon, le cas des noms de colonne peut également être important.

+0

Je pense que la colonne Department.Salary n'est pas nécessaire pour cette requête et vous devez également calculer la moyenne en utilisant AVG (e.salary) au lieu de AVG (Salary) – laurent

+0

Je suis d'accord avec laurent-rpnet et préférerais utiliser le nom qualifié plutôt que d'utiliser nom de la colonne directe. «e.salary» plutôt que «Salary» –

Questions connexes