我有一个名为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';
但我没有输出,请帮助。
答案 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
我们需要在一行中计算Pending
和Closed
个案例,因此我们对所有行执行sum()
但是我们只需要在case_status匹配时计算一行,所以case when then end
逻辑就像计算未决案例一样
sum(case when Case_Status = 'Pending' then 1 else 0 end) Pending
字面意思是基于内部案例表达式结果对所有行的值求和,只有当状态为Pending时才给出1,否则为0 ..所以我们计算所有挂起的行