存储过程中多列的计数

时间:2013-09-04 13:25:22

标签: sql-server stored-procedures

enter image description here我的存储过程如下:

ALTER procedure [dbo].[Driverperformance]
@Ecode nvarchar(50),  
@startdate datetime, 
@enddate datetime  
as   begin   

SELECT  e.Ecode, CAST(q.dtime AS DATE) as Date ,  e.Ename,  count(q.Ecode) CntEcode 
FROM EmployeeMaster_tbl e 
JOIN Transaction_tbl q  
ON e.Ecode = q.Ecode     

where q.Ecode=@Ecode and dtime >= '' + @startdate +'' and dtime <= ''+@enddate +''

group by e.Ecode, e.Ename, CAST(q.dtime AS date) 

ORDER BY CAST(q.dtime AS date)--e.Ecode DESC

end

这工作正常。在此我得到[(q.Ecode)]的计数是perferct.i在事务表名称(DelEcode)中还有一个字段。我想以相同的方式计算(DelEcode)。山姆方式意味着我如何计算Ecode,因为我必须计算DelEcode aslos.so我必须在我当前的存储过程中做出什么改变...同时执行我这样出去:但我想得到还有一个列cntDelcode,我想显示DelEcode的计数

2 个答案:

答案 0 :(得分:0)

这样的事情让用户可以选择是否查询ECODE或DELECODE:

ALTER procedure [dbo].[Driverperformance]
@code nvarchar(50),  
@startdate datetime, 
@enddate datetime,
@test VARCHAR(1)
as   

IF @test = 1 BEGIN
    SELECT  e.Ecode, CAST(q.dtime AS DATE) as Date ,  e.Ename,  count(q.Ecode) CntEcode 
    FROM EmployeeMaster_tbl e 
    JOIN Transaction_tbl q  
    ON e.Ecode = q.Ecode     
    where q.Ecode=@code and dtime >= '' + @startdate +'' and dtime <= ''+@enddate +''
    group by e.Ecode, e.Ename, CAST(q.dtime AS date) 
    ORDER BY CAST(q.dtime AS date)--e.Ecode DESC
    END
ELSE
    BEGIN

    SELECT  e.delEcode, CAST(q.dtime AS DATE) as Date ,  e.Ename,  count(q.delEcode) Cntcode 
    FROM EmployeeMaster_tbl e 
    JOIN Transaction_tbl q  
    ON e.delEcode = q.delEcode     
    where q.delEcode=@code and dtime >= '' + @startdate +'' and dtime <= ''+@enddate +''
    group by e.delEcode, e.Ename, CAST(q.dtime AS date) 
    ORDER BY CAST(q.dtime AS date)--e.Ecode DESC
    END
END

这是未经测试的,但你可以看到我要去的地方。额外的输入允许用户选择要测试的字段。

答案 1 :(得分:0)

您还可以运行以下代码:

ALTER procedure [dbo].[Driverperformance]
@Ecode nvarchar(50),  
@startdate datetime, 
@enddate datetime,
@test bit=0  
as   begin   

SELECT  e.Ecode, CAST(q.dtime AS DATE) as Date ,  e.Ename,  case when @test=1 then count(q.Ecode) else count(q.delCode) end as CntEcode 
FROM EmployeeMaster_tbl e 
JOIN Transaction_tbl q  
ON e.Ecode = q.Ecode     

where q.Ecode=@Ecode and dtime >= '' + @startdate +'' and dtime <= ''+@enddate +''

group by e.Ecode, e.Ename, CAST(q.dtime AS date) 

ORDER BY CAST(q.dtime AS date)--e.Ecode DESC

end