2010-02-23 23 views
2

Puis-je demander SUM() dans un ISNULL() .... Considérez mon instruction select suivante sql serverCette syntaxe sql est-elle correcte?

SELECT e.Emp_Id,e.Identity_No,e.Emp_Name,case WHEN e.SalaryBasis=1 
THEN 'Weekly' ELSE 'Monthly' end as SalaryBasis,e.FixedSalary, 
    ISNULL(Adv.Daily_Wage,0) as Advance from Employee as e 
    inner join Designation as d on e.Desig_Id=d.Desig_Id 
    Left Outer Join Payroll as Adv on e.Emp_Id=Adv.Emp_Id where e.Is_Deleted=0 

Cette déclaration fonctionne bien .... Mais quand je demande SUM() dans un ISNULL()

SELECT e.Emp_Id,e.Identity_No,e.Emp_Name,case WHEN e.SalaryBasis=1 
    THEN 'Weekly' ELSE 'Monthly' end as SalaryBasis,e.FixedSalary, 
     ISNULL(SUM(Adv.Daily_Wage),0) as Advance from Employee as e 
     inner join Designation as d on e.Desig_Id=d.Desig_Id 
     Left Outer Join Payroll as Adv on e.Emp_Id=Adv.Emp_Id 
     where e.Is_Deleted=0 

J'ai l'erreur,

La colonne 'Employee.Emp_Id' n'est pas valide dans la liste de sélection car elle n'est pas contenue dans une fonction agrégée ou la clause GROUP BY.

Toute suggestion ....

Répondre

2

Vous devez GROUP BY les autres colonnes de la sélection. Quelque chose comme

SELECT e.Emp_Id, 
     e.Identity_No, 
     e.Emp_Name, 
     case 
      WHEN e.SalaryBasis=1 THEN 'Weekly' 
      ELSE 'Monthly' 
     end as SalaryBasis,e.FixedSalary, 
     ISNULL(SUM(Adv.Daily_Wage),0) as Advance 
from Employee as e inner join 
     Designation as d on e.Desig_Id=d.Desig_Id Left Outer Join 
     Payroll as Adv on e.Emp_Id=Adv.Emp_Id 
where e.Is_Deleted=0 
GROUP BY e.Emp_Id, --This section is what you are missing 
     e.Identity_No, 
     e.Emp_Name, 
     case 
      WHEN e.SalaryBasis=1 THEN 'Weekly' 
      ELSE 'Monthly' 
     end, 
    e.FixedSalary 

Jetez un oeil à la définition ici

GROUP BY (Transact-SQL)

+0

@astander maintenant il a travaillé .... Merci j'ai raté une colonne ... –

+0

la 'case' dans le' GROUP BY' * me semble inefficace ... Vous pouvez tout aussi bien grouper par 'e.SalaryBasis' à la place. – bart