2016-04-14 9 views
1

するための手順を作成します。は私がある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_Detailsの保留中および終了中の番号Case_Statuses例えば

入力がMURDERであれば、私はのような出力が何かになりたい:私はこのために正しいロジックを得ていないのです

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

I 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

プロシージャをドロップした直後に実行しようとしています。また、 '@ acc = 'Pending'と@ acc = 'Closed''は何も決して満たさないでしょう。 – Quassnoi

+0

私は間違っていることを知っています、あなたは論理がそれを振る舞うべきであることを教えてください。 –

答えて

1

のミスだから、カップル..

ワン:あなたが実行する前に手順を落としました。 2:クエリは、クエリのために間違った

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_Detailsの特定のタイプのデータを必要とし、我々はPendingClosed例をカウントする必要がありますすべての行にわたってsum()を実行します。

しかし、我々はcase_statusが一致する行のみをカウントする必要があるので、保留中の場合

文字通り1時にのみを与えるインナーケース式の結果に基づいて、合計のすべての行の値を意味
sum(case when Case_Status = 'Pending' then 1 else 0 end) Pending 

をカウントするようcase when then endロジックステータスはそれ以外の場合は0です。したがって、すべての保留中の行をネットカウントします。

+0

私は論理を得ていませんでした。説明するケア? P.S:あなたのコードを実行し、私に「キーワードの近くに誤った構文があります」 –

+0

@pratikwatwani更新された回答 – DhruvJoshi

+0

それが男を助けました!ありがとう、トン。ですから、私はロジックと基本についてもう少し詳しく検討する必要があります。ありがとうございました。 –

関連する問題