为表创建一个过程

时间:2016-04-14 19:56:51

标签: sql sql-server stored-procedures

我有一个名为C_CASE的表 这是:

CREATE TABLE C_CASE
(
    Case_ID int,
    Case_Details varchar(255),
    Case_Status varchar(255),
    Section_Of_Law varchar(255)
);

表中的数据是:

Case_ID    Case_Details    Case_Status  Section_Of_Law
------------------------------------------------------
333         Hit and Run     Pending       304(A)
444         Robbery         Closed        392
555         Extortion       Pending       384
222         Murder          Closed        302
323         Murder          Pending       304(A)
123         Robbery         Pending       392
336         Extortion       Closed        384
567         Murder          Closed        302

我的目标是创建一个程序,输出特定Case_Statuses的待处理和已关闭Case_Details的数量。

例如,如果输入为 MURDER ,那么我希望输出为:

Pending      Closed
-------------------
   1           2

我没有得到正确的逻辑。

我不擅长SQL,我已经尝试了很多,我真的需要帮助

我的程序代码是:

 create procedure StatusCount
     @acc varchar(40)
 as 
     select 
         count(Case_Status) 
     from 
         C_Case 
     where 
         @acc = 'Pending' 
         and @acc = 'Closed'
 go

 drop procedure StatusCount

 exec StatusCount 'Robbery'; 

但我没有输出,请帮助。

1 个答案:

答案 0 :(得分:1)

所以有几个错误..

一:您在执行前删除了该程序。 二:查询错误

create procedure StatusCount (@acc varchar(40))
as 
begin
    select 
        sum(case when Case_Status = 'Pending' then 1 else 0 end) Pending, 
        sum(case when Case_Status = 'Closed' then 1 else 0 end) Closed -- removed comma, there was an extra comma causing syntax issue
    from 
        C_Case 
    where 
        Case_Details = @acc
end
go

exec StatusCount 'Robbery'; 
--drop below proc

drop procedure StatusCount`

查询说明:

我们需要特定类型Case_Details的数据,所以

where Case_Details = @acc

我们需要在一行中计算PendingClosed个案例,因此我们对所有行执行sum()

但是我们只需要在case_status匹配时计算一行,所以case when then end逻辑就像计算未决案例一样

sum(case when Case_Status = 'Pending' then 1 else 0 end) Pending

字面意思是基于内部案例表达式结果对所有行的值求和,只有当状态为Pending时才给出1,否则为0 ..所以我们计算所有挂起的行