这个sql语法是否正确?
问题描述:
我能将SUM()
的ISNULL()
内....考虑我下面的SQL Server的select语句这个sql语法是否正确?
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
本声明做工精细....但是当我申请SUM()
内的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
我得到了错误,
'Employee.Emp_Id'列在无效选择列表,因为它不是包含在合计 函数或GROUP BY子句中的 。
任何建议....
答
您需要GROUP BY在选择其他列。像
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
东西看一看定义在这里
@astander现在它的工作....谢谢,我只是错过一列... – 2010-02-23 07:52:03
了'case'在' GROUP BY' *对我来说感觉效率低下......您可以用“e.SalaryBasis”来代替。 – bart 2010-02-23 08:46:24