Sql 为表创建一个过程
我有一张名为C_CASE的表 即: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 ---------------------------------
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既然你觉得这个问题很有用,请接受和/或投票,以便将来遇到类似问题的求职者发现这个问题很有用。[ ]