Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 为表创建一个过程_Sql_Sql Server_Stored Procedures - Fatal编程技术网

Sql 为表创建一个过程

Sql 为表创建一个过程,sql,sql-server,stored-procedures,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 ---------------------------------

我有一张名为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
我的目标是创建一个过程,该过程将为特定的
案例详细信息
输出挂起和关闭的
案例状态数

例如,如果输入为,则我希望输出为:

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'; 

但是我没有得到任何输出,请帮助。

所以有几个错误

One:您在执行前放弃了该过程Two:查询错误

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`
查询说明:

我们需要特定类型的
案例详细信息的数据,因此

where Case_Details = @acc
我们需要在一行中统计
未决
已结束的
案例,因此我们对所有行进行一次
求和()

但我们只需要在case_status为匹配时计算一行,因此
case when then end
逻辑类似于计算未决案例

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

字面意思是基于内部大小写表达式结果对所有行的值求和,只有在状态为“挂起”时才给出1,否则为0。。因此,我们将对所有挂起的行进行净计数

您在删除过程后立即尝试执行该过程。另外,
其中@acc='Pending'和@acc='Closed'将永远无法满足任何要求。我知道我错了,你能告诉我它背后的逻辑是什么吗?我不明白逻辑。想解释一下吗?注:我执行了你的代码,它给了我“不正确的语法附近的关键字从”,这帮助了人!非常感谢。所以现在我需要在逻辑和基础方面做更多的工作。谢谢。@pratikwatwani既然你觉得这个问题很有用,请接受和/或投票,以便将来遇到类似问题的求职者发现这个问题很有用。[  ]