SQL把select放在case中

时间:2012-12-26 10:30:56

标签: sql select

我有3个表Emp,Payroll_Emp和tbCompany Emp和tbCompany之间没有关系

我做了那个查询,但我为所有员工提供了相同的CeilingEOS 我需要为每个员工汇总ceilingEOS 我知道我必须在选择中放入SUM(CeilingEOS),但它也不起作用 请有人帮帮我

DECLARE @CeilingEOS decimal(18,2)

SET  @CeilingEOS=(select SUM (CeilingEOS)  FROM Payroll_Emp inner join emp on Payroll_Emp.Employee_Id = Emp.[ID] where @Date>=Payroll_Emp.Payroll_From)

select Emp.ID, tbCompany.ID, tbCompany.CompanyName, tbCompany.CEmpRepDesc, 
Emp.SSN, 

--case  when Payroll_Emp.CeilingEOS IS NOT NULL then select SUM(CeilingEOS) as ceilingEOS
from Payroll_Emp where Payroll_Emp.Employee_Id = Emp.[ID] group by Emp.ID end


FROM  tbCompany, Emp -- inner join Payroll_Emp on Payroll_Emp.Employee_Id = Emp.[ID]  
where @Date >= Emp.HireSince and Emp.ID=Emp.[ID]

1 个答案:

答案 0 :(得分:0)

你可以试试这个:

DECLARE 
    @CompanyID uniqueidentifier, 
    @CompanyName nvarchar(max), 
    @CEmpRepDesc nvarchar(max)

select top 1 @CompanyID = tbCompany.ID, @CompanyName= tbCompany.CompanyName, @CEmpRepDesc = tbCompany.CEmpRepDesc from tbCompany

select Emp.ID, Emp.SSN, ComputedInfos.CeilingEOS, @CompanyID, @CompanyName, @CEmpRepDesc
from Emp 
left join (select Emp.ID as EmpID, SUM(CeilingEOS) as CeilingEOS from Emp join Payroll_Emp on Payroll_Emp.Employee_Id = Emp.[ID] where @Date >= Emp.HireSince group by Emp.ID) ComputedInfos 
    on ComputedInfos.EmpID = Emp.ID
where @Date >= Emp.HireSince